PHP not redirecting when working with Jquery post
Possible Duplicate:
How to manage a redirect request after a jQuery Ajax call
我有一个通过jquery验证客户端的表单。然后jquery将这些数据传递给一个PHP脚本,以进行服务器端验证。在PHP脚本的末尾,我尝试在成功后重定向,但不会发生重新定向。
jquery是否干扰重定向?如何让PHP脚本重定向。不想用jquery重定向,bc我将使用会话,并希望在重定向时保留会话数据。
代码如下:
jQuery:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $.ajax({ //this is the php file that processes the data and send mail url:"includes/process/processAdminLogin.php", //POST method is used type:"POST", //pass the data data: dataString, //indicate result is text dataType:"text", //Do not cache the page cache: false, //success success: function (data) { $('input').removeAttr('disabled'); //enable input fields again. if(data =="fail"){ $("#statusMessage").html(""); $("#statusMessage").html("<p class='statusBoxWarning'>Username and password do not match! </p>"); $('button').removeAttr('disabled'); document.forms[0].reset(); } } }); |
PHP
1 2 3 4 5 6 7 8 9 10 | if($correctPass == 1){ ob_start(); session_start(); $_SESSION['usernameIdentity'] = $userName; unset($userName, $userPass); header("Location: ../../adminDashboard.html"); exit; }else{ echo"fail"; } |
PHP脚本到达重定向部分,然后挂断。我真的想保留jquery功能,以及php重定向。有更好的方法吗?
谢谢!
1 | FINAL WORKING SOLUTION: |
好的,在这个帖子和其他类似帖子的输入之后,这就是我的工作解决方案。这可能不是最有效或最漂亮的解决方案,但它是有效的,目前必须这样做。
JQuery
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $.ajax({ //this is the php file that processes the data and send mail url:"includes/process/processAdminLogin.php", //GET method is used type:"POST", //pass the data data: dataString, //indicate result is text dataType:"text", //Do not cache the page cache: false, //success success: function (data) { $('input').removeAttr('disabled'); //enable input fields again. if(data =="success"){ $('#statusMessage').html('<form action="http://www.example.com/test/userRegistration/adminDashboard.html" name="userSubscription" method="post" style="display:none;"><input type="text" name="username" value="' + reg_contact_username + '" /><input type="text" name="password" value="' + reg_contact_password + '" /></form>'); document.forms['userSubscription'].submit(); }else{alert("couldn t redirect");} } }); |
PHP
1 2 3 4 5 | if($correctPass == 1){ echo"success"; }else{ echo"fail"; } |
"接收重定向"页将必须验证再次提供的用户名和密码,因此验证将执行2x…这是非常低效的。如果有人能为我提供更好的解决方案-拜托!写一个样本也会有帮助。
谢谢!
由于Ajax发生在"幕后"(也就是说),重定向只会中断对JavaScript处理程序的响应。
您需要返回URL,并让您的回调将浏览器踢到一个新的位置。
更新:注意,由于必须将数据返回到前端,因此您需要添加一个
对于您的解决方案,我强烈建议您不要使用表单提交技术。正如您所说,它不高效,不漂亮,而且需要两倍的工作(验证用户2次)。
如果用户成功登录,为什么不使用PHP的内置会话处理来设置会话,然后在简单的javascript浏览器重定向之后简单地检查会话?
javascript重定向和
在哪里刷新输出缓冲区?尝试在
编辑:也许将相对URI转换为绝对URI可以解决问题。这是直接从php.net中提取的一般示例。它基于一个相对的URI创建一个绝对的URI——你可以一直硬编码绝对的URI,而不是这样做。
1 2 3 4 5 6 7 8 |
尝试在Ajax调用中使用完整的URL。
而不是:
1 | url:"includes/process/processAdminLogin.php", |
尝试:
1 | url:"http://www.mysite.com/includes/process/processAdminLogin.php", |