Javascript 如何在php中通过ajax重定向到不同的页面

Javascript 如何在php中通过ajax重定向到不同的页面,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,这是我的ajax代码,我可以轻松地将表单提交到php页面 后端 下面是我的php代码 我想要的是,当查询成功时,我想重定向我的 用户可以使用ajax访问不同的页面,就像我以前使用php一样 使用标题,通过提供所有必要的url参数,任何帮助 我会非常感激你的 只能写入窗口。location='you URL';如果需要通过ajax重定向到另一个页面,则必须使用javascript或jquery,而不是window.location.href,而不能使用php。您可以收听并捕获响应回声1;或php的

这是我的ajax代码,我可以轻松地将表单提交到php页面 后端

下面是我的php代码

我想要的是,当查询成功时,我想重定向我的 用户可以使用ajax访问不同的页面,就像我以前使用php一样 使用标题,通过提供所有必要的url参数,任何帮助 我会非常感激你的


只能写入窗口。location='you URL';如果需要通过ajax重定向到另一个页面,则必须使用javascript或jquery,而不是window.location.href

,而不能使用php。您可以收听并捕获响应回声1;或php的任何其他响应,然后在成功回调中重定向到另一个带有window.location.href=X或类似内容的页面

希望这对您有所帮助

您认为客户端的id和电子邮件来自哪里?您需要在php端正确返回它们,就像在json中一样。然后,您可以在ajax成功回调中将变量作为响应的属性进行处理

<?php
if( $run && $run_query ) {
    echo json_encode(array("id" => $booking, "email" => $email));
}
else {
    echo json_encode(array("error" => mysqli_error($db)));
}

如果您想将动态url传递到html,那么您可以通过将动态url从php传递到ajax来实现

<?php
if ($run && $run_query ) {
  echo $booking;
  echo $email;
    $return['url'] = "index.php?booking=success&booking_id=".$booking."&user=".$email."price=".$price."phone=".$phone;
   $return['err_msg']  = '';
}
else {
    $return['url'] = '';
    $return['err_msg']  = "Error description: " . mysqli_error($db));
}
 echo json_encode($return);/* encode json data to get in html file*/
?>
javascript代码可能是这样的

<script type="text/javascript">
$("#contact-form").submit(function(e){
  e.preventDefault();
  $.ajax({
    url: 'customerdata.php',
    async: true,
    cache: false,
    data: $('#contact-form').serialize(),
    type:'post',
      success: function(data) {
            console.log(data); /*see server msg */
           var pd = JSON.parse(data); /*decode json data*/

           location_url = pd.url; 
        if (pd.url !='') {
             document.getElementById("loader").style.display = "none";
             window.location.href = location_url;
        }
        else {
           var err_msg = pd.err_msg;
           if(err_msg != ''){
              $('#error').html(err_msg);
           }
            document.getElementById("loader").style.display = "none";
        }
         },

     error: function(xhr, ajaxOptions, thrownerror) { }

       }
  });
});

</script>

我不是PHP专家,但请尝试: 在php代码中:

header('Content-Type: application/json');
echo json_encode(array('id' => 'your_id', "email" => 'test@email.com'));
在js中:

success: function(data) { var email = data.email; var id = data.id }

您需要使用window.location.href=。。。。您不能在这里使用服务器端重定向,因为您在这里发出后台请求,而您在HTTP级别上所做的一切都将在这里“后台”进行。因此,如果PHP脚本动态确定目标URL,则必须将该值传递回AJAX脚本,然后将其指定为新位置。您可以尝试使用window.location.replace'index.PHP?booking=success&booking_id='+id+'&user='+email;但我不是100%确定你希望看到什么。是否要将ajax响应中的标题添加到重定向请求中?与前面的问题相同,您认为id和电子邮件来自何处@我的上帝。最糟糕的混乱代码是不可访问的双重解析。不要这样做。我试过了,但它返回空参数email和id当您手动调用customerdata.php或在浏览器网络控制台中看到什么时,您会得到什么?听起来你还有别的东西不太管用@洛根编辑了代码,请检查,实际上有一个选项,检查电子邮件是否存在!!我得到的是未定义的警告
<script type="text/javascript">
$("#contact-form").submit(function(e){
  e.preventDefault();
  $.ajax({
    url: 'customerdata.php',
    async: true,
    cache: false,
    data: $('#contact-form').serialize(),
    type:'post',
      success: function(data) {
            console.log(data); /*see server msg */
           var pd = JSON.parse(data); /*decode json data*/

           location_url = pd.url; 
        if (pd.url !='') {
             document.getElementById("loader").style.display = "none";
             window.location.href = location_url;
        }
        else {
           var err_msg = pd.err_msg;
           if(err_msg != ''){
              $('#error').html(err_msg);
           }
            document.getElementById("loader").style.display = "none";
        }
         },

     error: function(xhr, ajaxOptions, thrownerror) { }

       }
  });
});

</script>
header('Content-Type: application/json');
echo json_encode(array('id' => 'your_id', "email" => 'test@email.com'));
success: function(data) { var email = data.email; var id = data.id }