Jquery 1.9.1を使用して、「async」をfalseに設定した場合にのみ成功する$.ajax呼び出しを実行しています。私はリクエスト/レスポンスを見てきましたが、それらは良いものです。私が見ることができる「失敗」と呼ぶ理由はありません。
'async'がtrueに設定されている場合でも、.done()が呼び出されることを期待しています... asyncをfalseに設定しているため、統合テストに合格しています。それが文字通り唯一の違いです。実際のコードでasyncを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に公開する前に、名前を改ざんしました。したがって、コンテンツの長さが間違っており、おそらく他の何か...