2

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に公開する前に、名前を改ざんしました。したがって、コンテンツの長さが間違っており、おそらく他の何か...

4

1 に答える 1

0

他の人が私がしたほど多くの時間を無駄にしないように...

その理由は、フォームの送信ボタンのクリックハンドラーで$ .ajaxを実行していたため、最初にe.preventDefault()を実行する必要があったためです。

于 2013-02-24T15:15:03.327 に答える