我使用jQuery.post()
向服务器发送数据,当服务器将数据发送回客户端时,调用post()回调。我知道服务器可能会使用重定向标头字段(“Location
”)进行响应。
目前,不会发生重定向。可能是什么原因? 是否有可能在重定向发生之前运行脚本?
更新:
附上一个剪切的代码。我知道POST方法被服务器接受,服务器响应POST。不知怎的,总是调用error()
(看起来它甚至在客户端\ browswer接受响应之前就已经发生了。)
出了什么问题?
$(document).ready(function() {
$("#loginForm").submit(function() {
$.ajax({
type : "POST",
data : $("#loginForm :input").not("#loginBtn").serialize(),
url : "http://localhost/auth",
success : function(data, textStatus, jqXHR) {
alert("success");
alert(jqXHR.getResponseHeader("Location"));
},
error : function(jqXHR, textStatus, errorThrown) {
alert("error");
}
});
});
});
答案 0 :(得分:1)
jquery.post()
通过发出Ajax请求来工作。在Ajax调用中,PHP脚本异步工作(将其视为后台线程)。因此,PHP脚本无法重定向客户端的浏览器。要做的就是让PHP脚本负责重定向的URL,并使用javascript重定向。
在你的POST回调中:
function(data){ //data will be the URL to redirect to, sent back by the PHP script
window.location = data;
}
修改强>
上的Jquery文档statusCode(已添加1.5)地图
Default: {}
当响应具有相应代码时要调用的数字HTTP代码和函数的映射。例如,以下内容将在响应状态为404时发出警告:
$.ajax({
statusCode: {
404: function() {
alert('page not found');
}
}
});
如果请求成功,则状态码函数采用与成功回调相同的参数;如果它导致错误,则它们采用与错误回调相同的参数。
答案 1 :(得分:-1)
请在重定向情况下得到简单的响应,无需重定向打印任何标记,如“重定向”,并使用
编写客户端重定向if(responce == 'redirect')
window.location = "Your url"
请勿在服务器上重定向。
它会起作用。
答案 2 :(得分:-2)
如果执行导致重定向的操作,JQuery不会检测到它。浏览器在幕后自动处理,以创建无缝体验。