Skip to content Skip to sidebar Skip to footer

Header Wont Redirect When Passedthrough Ajax

Not sure if this is possible but I have a page that submits a form with AJAX and if it meets certain conditions it should automatically take the user to another page. NOTHING is ou

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"