2012-09-11 260 views
2

你好,我有一个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确定。我究竟做错了什么 ?

+0

和clearPageInputs()在做什么? – Jignesh

+0

'function clearPageInputs(){ \t $(“input [type = text]”)。val(''); }' –

+0

您的网址错误。看看错误的身体,你会发现真正的网址 – Ilya

回答

0

PRG模式和Ajax

它看起来像你的服务器返回一个HTTP 200状态码,当用户ID和密码不会验证。这是正确的行为,因为HTTP错误代码不是用于应用程序错误,而是用于HTTP协议错误。

当用户标识和密码成功匹配时,您被重定向到另一个页面。这也是正常的行为,例如以防止其他人使用后退键重新使用您的登录凭证。

这被称为邮政/重定向/获取模式。

参见:http://en.wikipedia.org/wiki/Post/Redirect/Get

的问题是,PRG模式没有发挥好与Ajax应用程序。重定向应该由浏览器处理。因此它对于jQuery代码是透明的。 Ajax html响应将是302的位置标题中提到的页面。您的Ajax应用程序将无法看到它正在被重定向。所以你的卡住了。

在我的一个项目中,我在服务器端解决了这个问题。如果我检测到一个Ajax调用,我不会发送重定向,而是一个正常的200响应。这只适用于您有权访问服务器代码的情况。

如果您无法更改Ajax调用的重定向,那么您可以解析响应标头或html以查看您是否被重定向并相应地执行操作。可能登录会设置一个cookie,所以你可以尝试查找该cookie的存在。