2017-07-21 33 views
0

这是我的Ajax代码,我可以很容易地提交我的表单的PHP页面 后端如何通过AJAX重定向到不同的页面在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(response) { 

     document.getElementById("loader").style.display = "none"; 

     if(response.hasOwnProperty('id')) { 
      window.location.href = 'index.php?booking=success&booking_id=' + response.id + '&user=' + response.email; 
     } 




     } 
}); 
}); 




</script> 

现在,这里是我的PHP代码,

<?php 
    $name=trim(htmlspecialchars($db -> real_escape_string($_POST['name']))); 
$mail=trim(htmlspecialchars($db -> real_escape_string($_POST['email']))); 
$phone=trim(htmlspecialchars($db -> real_escape_string($_POST['important_number']))); 
$booking="ZOHO".crypto_rand_secure(10000,100000); 
$typeofcab=trim(htmlspecialchars($db -> real_escape_string($_POST['the_cab']))); 
$alt=trim(htmlspecialchars($db -> real_escape_string($_POST['alternate_number']))); 
$drop=trim(htmlspecialchars($db -> real_escape_string($_POST['drop_address']))); 
$pickup=trim(htmlspecialchars($db -> real_escape_string($_POST['pickup_address']))); 
$source=trim(htmlspecialchars($db -> real_escape_string($_SESSION["source"]))); 
$destination= trim(htmlspecialchars($db -> real_escape_string($_SESSION["destination"]))); 
$type=trim(htmlspecialchars($db -> real_escape_string($_SESSION['type']))) ; 
$date=trim(htmlspecialchars($db -> real_escape_string($_POST['journey_date']))); 
$gotime= trim(htmlspecialchars($db -> real_escape_string($_SESSION["time"]))); 
$price= trim(htmlspecialchars($db -> real_escape_string($_SESSION["price"]))); 
$status="Pending"; 
$takenby="Pending"; 
$avail="Pending"; 
$driver="Pending"; 
$carnumber="Pending"; 
$password=$phone=trim(htmlspecialchars($db -> real_escape_string($_POST['important_number']))); 
$need=trim(htmlspecialchars($db -> real_escape_string($_POST['need']))); 
$vendorprice = price($price); 

if(!isset($_POST['return_date'])){ 
    $return='NOT APPLICABLE'; 
    $returntime='NOT APPLICABLE'; 


} 
else { 
    $return=$_POST['return_date']; 
    $returntime=$_SESSION["timeo"]; 
} 



$stmt=$db->prepare("SELECT `email` FROM `users` WHERE email=?"); 
$stmt->bind_param("s",$mail); 
$rock=$stmt->execute(); 
$stmt->bind_result($email); 
while($stmt->fetch()) { 
} 



if($email !=$mail) 
{ 

$query=$db->prepare("INSERT INTO `customerdata`(`vendorprice`,`price`,`name`, `email`, `phone`, `bookingid`, `source`, `destination`, `sourceaddress`, `destinationaddress`, `alternate`, `typeofjourney`, `journeydate`, `returndate`, `journeytime`, `returntime`, `status`, `availability`, `takenby`, `cabtype`, `drivername`, `carnumber`, `customerneed`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); 


$query->bind_param("sssssssssssssssssssssss",$vendorprice,$price,$name,$mail,$phone,$booking,$source,$destination,$pickup,$drop,$alt,$type,$date,$return,$gotime,$returntime,$status,$avail,$takenby,$typeofcab,$driver,$carnumber,$need); 
$run=$query->execute(); 


$query_user=$db->prepare("INSERT INTO `users`(`password`,`email`, `phone`, `bookings`,`name`) VALUES (?,?,?,?,?)"); 
$query_user->bind_param("sssss",$password,$mail,$phone,$booking,$name); 
$run_query=$query_user->execute(); 
$mailsent=sendmail($name,$mail,$booking,$type,$date,$gotime,$source,$destination,$price,$password,$typeofcab); 





if ($run && $run_query) { 
    echo json_encode(array("id" => $booking, "email" => $email)); 

    // session_destroy(); 
    //header('Location: index.php?booking=success&booking_id='.$booking."&user=".$email."price=".$price."phone=".$phone); 
//exit; 
} 
else { 
    echo json_encode(array("error" => mysqli_error($db))); 
// echo("Error description: " . mysqli_error($db)); 
    // header('Location:index.php?failed'); 
    // exit; 


} 

} 


else { 

// $yourURL="bookingconfirmation.php?route=oneway"; 

//echo ("<script>alert('This email already exists with us,please try different email'); location.href='$yourURL'</script>"); // redirect with javascript, after page loads 
echo json_encode(array("failed" => $email)); 
//echo "this email already exists"; 


} 




    ?> 

我要的是,当查询sucessfull,我想我的 用户重定向到不同的页面使用Ajax,就像我与PHP中使用头做 前,通过给所有neccessary URL参数,任何帮助 将非常感激牛逼

+0

你需要做的是,你已经拥有了同样的方式在你的代码中,使用'window.location.href = ...'。您不能在此使用服务器端重定向 - 因为您在此处发出_background_请求,并且您在HTTP级别上执行的所有操作都在此处保持“在后台”。因此,如果您的PHP脚本动态确定目标URL,则必须将该值传递回您的AJAX脚本,然后将其指定为新的位置。 – CBroe

+0

您可以尝试 'window.location.replace('index.php?booking = success&booking_id ='+ id +'&user ='+ email);' 但我不是100%确定您期望看到什么。你想添加来自Ajax响应的头来重定向请求吗? – inser

+0

与之前提到的问题相同,您认为'id'和'email'来自哪里? ;)@inser – eisbehr

回答

0

你可以只写window.location ='你的URL';而不是“window.location.href”

-1

如果你需要通过ajax重定向到另一个页面,那么你必须用JavaScript或jQuery来做,你不能用php来做到这一点。你可以听并捕获响应echo 1;或PHP任何其他反应,然后在success回调重定向到与window.location.href="X"或类似的另一页..

希望帮助你

0

如果你认为idemail是来自客户端?你需要在php端正确地返回它们,就像在json中一样。您可以在ajax成功回调中将变量作为response的属性处理。

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

在客户端使用response对象,没有作为参数传递变量,只是作为属性:

$.ajax({ 
    url: 'customerdata.php', 
    cache: false, 
    data: $('#contact-form').serialize(), 
    dataType: 'json', 
    type: 'post', 
    success: function(response) { 
     document.getElementById("loader").style.display = "none"; 

     if(response.hasOwnProperty('id')) {     
      window.location.href = 'index.php?booking=success&booking_id=' + response.id + '&user=' + response.email; 
     } 
     else { 
      alert(response.error); 
     } 
    } 
    } 
}); 
+0

我试过了,但是它返回的空参数电子邮件和ID – loGAN

+0

当你手动调用'customerdata.php'或者你在浏览器网络控制台中看到什么时,你会得到什么?听起来像你还有别的东西不工作太... @loGAN – eisbehr

+0

我编辑了代码请检查,实际上有一个选项,检查电子邮件是否存在或不!我得到的是警报说明undefined – loGAN

-1

,如果你想通过动态URL的HTML,那么你可以通过传递这样做从PHP动态URL到阿贾克斯像

<?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> 
+0

哦,我的上帝。最糟糕的代码一个不必要的双解析。不要这样做。 – eisbehr

0

我不是PHP的专家,但尝试: 在PHP代码:

header('Content-Type: application/json'); 
echo json_encode(array('id' => 'your_id', "email" => '[email protected]')); 

在JS:

success: function(data) { var email = data.email; var id = data.id } 
相关问题