2013-03-14 97 views
7

那么它的所有标题。我试图执行破坏性操作之前检查用户的口令:jQuery AJAX调用202响应的错误回调 - 不应该是成功的回调?

$.ajax({ 
    type: 'POST', 
    url: '/path/to/post.json', 
    data: { password: '**********' }, 
    success: function() { console.log("Success!"); }, 
    error: function() { console.log("Error!"); } 
}); 

在控制台:

202 Accepted 123ms 
Error! 

我认为403禁止错误密码,202接受了正确的密码将是适当的响应代码,但我不太了解HTTP的说法。

的jQuery 1.8.3版本

+0

由于202的状态,错误回调未被触发,但是由于将响应解析为JSON(最有可能)时出错。您是否使用有效的json进行响应? (空身是无效的JSON)无效的密码可能是401或400,因为它的实用性。 – Esailija 2013-03-14 17:00:58

+0

我这么认为?响应只是一个字符串。在控制台中,它看起来像“密码无效”。它是否需要成为键/值对? – AJcodez 2013-03-14 17:04:01

+0

我不认为202与“正确的密码”有关。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html – 2013-03-14 17:04:31

回答

9

由于202的状态而导致错误回调未被触发,但是由于在将响应解析为JSON时出错。对于jQuery,2xx304是成功的。

如果响应正文是Invalid Password那是无效的json,并在它试图解析它时触发jQuery错误。一个正确的JSON字符串在它周围有引号,如"Invalid Password"。您应该使用JSON序列化程序对您的响应进行JSON编码,而不是手动构建json,您可以看到它很容易出错。

+4

另一个原因是当请求主体为空时,则jQuery调用错误回调。 – 2013-07-27 00:55:28

+0

那么在这种情况下回复的最佳做法是什么?一个无用的字符串?一个空的清单?编写我的后端以发送一些垃圾数据时感觉很愚蠢。 – 2017-07-30 21:30:43

0

没关系,得到了它与

statusCode: { 
    202: function() { console.log("Success!"); }, 
    403: function() { console.log("Error!'); } 
} 

代替successerror回调的工作。尽管如此,还是有点莫名其妙地触发了这个错误。

相关问题