Header Wont Redirect When Passedthrough Ajax
Solution 1:
Headers can only be modified before any body is sent to the browser (hence the names header/body). Since you have AJAX sent to the browser, you can't modify the headers any more. However, you can have the add.php script called via AJAX return the $id parameter. Then that parameter can be used in JavaScript to redirect the page: window.location = 'http://localhost/manage/card.php?id=' + id.
More info on PHP header(): http://www.php.net/manual/en/function.header.php
AJAX
$('form').on('submit', function (e) {
   e.preventDefault();
   $.ajax({
     type: 'post',
     url: '_ajax/add.php',
     data: $('form').serialize(),
     success: function (data) {
       window.location = 'http://localhost/manage/card.php?id=' + data;
     }
   });
});
add.php
$row = mysqli_fetch_array($result);
$id = $row['id'];
echo$id;
exit;
Solution 2:
You indicate in the question that under certain conditions, you want a redirect.
To do that, you would want to alter your javascript to contain an if condition, and to watch for certain responses.
I would recommend modifying your responses to be json, so that you can pass back different information (such as a success status, as well as a redirect url, or other information you might want).
 $('form').on('submit', function (e) {
   e.preventDefault();
   $.ajax({
     type: 'post',
     url: '_ajax/add.php',
     data: $('form').serialize(),
     success: function (data) {
       var response = $.parseJSON(data);
       if (response.redirect) {
           window.location = response.redirect_url;
       } else {
           $("input").val('Company Name');
           $("form").hide();
           getInfo();
       }
     }
   });
});
As for your add.php file, you'll want to change this to be something more like so:
$json = array(
    'redirect' => 0,
    'url'      => '',
}
if (...condition for redirect...) {
    $row = mysqli_fetch_array($result);
    $id = $row['id'];
    $json['redirect'] = 1;
    $json['redirect_url'] = "Location: http://localhost/manage/card.php?id=$id";
}
echo json_encode($json);
die();
Solution 3:
You seem to have a miss understanding of how AJAX works. Introduction to Ajax. The reason why your redirect appears not to working is because an Ajax call doesn't directly affect your browser. It's a behind the scenes call.
To get the data out from the AJAX call you need to do something with the returned data.
success: function (data) {
  $("input").val('Company Name');
  $("form").hide();
  //You need to do something with data here.
  $("#myDiv").html(data); //This would update a div with the id myDiv with the response from the ajax call.getInfo();
}
Post a Comment for "Header Wont Redirect When Passedthrough Ajax"