使用 Jquery 1.9.1 我正在运行 $.ajax 调用,只有当我将“async”设置为 false 时才会成功。我查看了请求/响应,它们很好。我可以看到没有理由称“失败”。
我期望 .done() 即使在“异步”设置为 true 时也会被调用...我有一个正在通过的集成测试,因为它将异步设置为 false。从字面上看,这是唯一的区别。我确认这是问题所在,因为我在真实代码中强制异步为 false,它突然开始成功并调用 .done()。
我猜这是 json 解析错误或 jQuery 错误,但我该如何确认?我很难在 jquery 源代码中找到它...这是要重现的 jQuery 代码。服务器正在正确创建对象,一切看起来都很好。(从响应中可以看出)
var newObj = { Name: 'jesus', Birthday: '02/12/2013' };
return $.ajax(
{
url: '/api/method',
type: 'POST',
processData: false,
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(newObj),
dataType: 'json',
async: true,
})
.done(function (data, statusText) {
console.log(statusText);
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.error(jqXHR);
console.error(textStatus);
console.error(errorThrown);
});
POST http://localhost:64838/api/method HTTP/1.1
Host: localhost:64838
Connection: keep-alive
Content-Length: 48
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://localhost:64838
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17
Content-Type: application/json; charset=UTF-8
Referer: http://localhost:64838/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
{"Name":"jesus","Birthday":"02/17/2013"}
HTTP/1.1 201 Created
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Location: http://localhost:64838/api/method/23
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Origin: *
Date: Sun, 24 Feb 2013 05:07:27 GMT
Content-Length: 115
{"Id":23,"UserId":1,"Name":"jesus","someDate":"2013-02-17T00:00:00","someId":null,"someOtherProperty":null}
PS 在上述输出中的每一行之前留 4 个空格非常烦人。有没有更简单的方法来格式化 SO 中的代码块?
谢谢你的帮助。
编辑:请不要深入阅读我发布的请求/响应。在将事物发布到 SO 上之前,我篡改了事物的名称。因此内容长度是错误的,也许还有其他一些东西......