通过ajax传递时,标头不会重定向

时间:2014-01-05 20:49:34

标签: javascript php jquery ajax

不确定这是否可行但是我有一个页面用AJAX提交表单,如果它符合某些条件,它应该自动将用户带到另一页。在标题标记之前输出NOTHING只是一堆条件。

问题:标头重​​定向无法正常工作......

AJAX

$('form').on('submit', function (e) {
   e.preventDefault();
   $.ajax({
     type: 'post',
     url: '_ajax/add.php',
     data: $('form').serialize(),
     success: function (data) {
       $("input").val('Company Name');
       $("form").hide();
       getInfo();
     }
   });
});

add.php

$row = mysqli_fetch_array($result);
$id = $row['id'];
header("Location: http://localhost/manage/card.php?id=$id");

3 个答案:

答案 0 :(得分:3)

只能在将任何正文发送到浏览器之前修改标题(因此名称标题/正文)。由于您已将AJAX发送到浏览器,因此无法再修改标头。但是,您可以通过AJAX调用add.php脚本返回$id参数。然后,可以在JavaScript中使用该参数来重定向页面:window.location = 'http://localhost/manage/card.php?id=' + id

有关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;

答案 1 :(得分:1)

您在问题中指出在某些条件下,您需要重定向。

为此,您需要更改您的javascript以包含if条件,并观察某些响应。

我建议将您的回复修改为json,以便您可以传回不同的信息(例如成功状态,重定向网址或您可能需要的其他信息)。

 $('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();
       }
     }
   });
});

至于你的add.php文件,你会想要改变这个更像是这样:

$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();

答案 2 :(得分:0)

您似乎对AJAX的工作方式缺乏了解。 Introduction to Ajax
您的重定向似乎无法正常工作的原因是因为Ajax调用不会直接影响您的浏览器。这是一个幕后的电话。

要从AJAX调用中获取数据,您需要对返回的数据执行某些操作。

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();
}