0

jsonp呼び出しを行うための次のコードがあります。

  var contacts;
     $.ajax({
                            url: "http://localhost:51973/Service1/GetContacts",
                            type: "GET",
                            async: false,
                            data: { companyName: company },
                            dataType: "jsonp",
                            success: function(data) {
                                contacts = data;
                            },
                            error: function (XMLHttpRequest, textStatus, errorThrown) {
                                alert("error " + XMLHttpRequest.statusText);
                            }
                        });

しかし、何らかの理由で連絡先が未定義として表示されます。fiddlerを使用してトラフィックを調べたところ、次の応答が返されていることがわかりました。

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Mon, 09 Apr 2012 14:52:33 GMT
X-AspNet-Version: 4.0.30319
Content-Length: 100
Cache-Control: private
Content-Type: application/x-javascript
Connection: Close

jQuery17107471185381512466_1333983153278([{"Email":"john@test.com","Name":"Test Company"}]);

では、なぜ連絡先変数が正しく設定されていないのですか?

4

1 に答える 1

5

ajax呼び出しの直後にcontacts変数を使用しようとしていると思います。それをしてはいけない。ajax呼び出しは非同期であるため、ajax呼び出しが完了した後のある時点で完了します。完了すると、成功ハンドラーが呼び出されます。連絡先情報を実際に使用するコードまたは関数呼び出しを成功ハンドラー内に配置する必要があります。これは非同期プログラミングであり、別の方法でコーディングする必要があります。

success: function(data) {
    contacts = data;
    // put your code or function calls here that use the contacts data
},
于 2012-04-09T15:06:20.133 に答える