您好我遇到了ajax json请求的问题。我总是得到一个错误,即使请求成功。目前我有这个代码:
function sumbitLoginForm(user, pass) {
if (user.trim() == '' || pass.trim() == '') {
alert("You must enter username and password!");
} else {
$.ajax({
type : 'POST',
url : 'https://url.php',
dataType : 'json',
data : {
userlogin : user,
userpass : pass
},
contentType: "application/json;",
success : function(data) {
$("#images").html("uspeshno");
},
error : function(data) {
$("#images").html("greshka");
}
});
}
return false;
}
$(document).ready(function() {
clearPageInputs();
$("#submitButton").click(function() {
sumbitLoginForm($("#username").val(), $("#password").val());
});
});
无论我输入什么用户名和密码,我总是收到错误。但是请求的状态正在改变,如果我输入正确的用户并且通过我获得状态302暂时移动,但是当我输入错误的用户或通过我获得状态200 OK。我做错了什么?
答案 0 :(得分:0)
PRG模式和Ajax
当用户标识和密码无法验证时,您的服务器看起来会返回HTTP 200状态代码。这是正确的行为,因为HTTP错误代码不是针对应用程序错误,而是针对HTTP协议错误。
成功匹配用户标识和密码后,您将被重定向到另一个页面。这也是正常行为,例如防止其他人使用后退密钥重新使用您的登录凭据。
这称为发布/重定向/获取模式。
请参阅:http://en.wikipedia.org/wiki/Post/Redirect/Get
问题是PRG模式对Ajax应用程序不起作用。重定向应由浏览器处理。因此它对jQuery代码是透明的。 Ajax html响应将是302的Location头中提到的页面。您的Ajax应用程序将无法看到它被重定向。所以你被困住了。
在我的一个项目中,我在服务器端解决了这个问题。如果我检测到Ajax调用,我不会发送重定向,而是发送正常的200响应。这仅在您有权访问服务器代码时才有效。
如果您无法更改Ajax调用的重定向,则可以解析响应标头或html以查看是否重定向并采取相应措施。登录可能会设置一个cookie,因此您可能会尝试查找该cookie的存在。