ajax json请求,总是返回错误

时间:2012-09-11 10:48:24

标签: ajax json

您好我遇到了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。我做错了什么?

1 个答案:

答案 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的存在。