2

使用 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 上之前,我篡改了事物的名称。因此内容长度是错误的,也许还有其他一些东西......

4

1 回答 1

0

只是为了让其他人不要像我刚才那样浪费时间......

原因是因为我在表单上提交按钮的单击处理程序中执行 $.ajax,因此我必须首先执行 e.preventDefault()。

于 2013-02-24T15:15:03.327 回答