1

少し背景:

私は実装しようとしており、AJAX を利用した SlickGrid を使用しています。ドキュメントはあまりないので、この例をベースとして使用しました。

この例では、目的の Web サービスをヒットしてデータを取得する次のコードがあります。

req = $.jsonp({
                    url: url,
                    callbackParameter: "callback",
                    cache: true, // Digg doesn't accept the autogenerated cachebuster param
                    success: onSuccess,
                    error: function(){
                        onError(fromPage, toPage)
                    }
                    });
                req.fromPage = fromPage;
                req.toPage = toPage;

jsonpが何をするのか正確にはわかりませんが、読んだところ、jsonを返し、クロスドメインリクエストを許可することを除いて、jQueryのajaxメソッドと非常に似ているようです。たまたま呼び出している Web サービスは XML のみを返すため、このコードのチャンクを次のように変更しました。

req = $.ajax({
                url: "/_vti_bin/lists.asmx",
                type: "POST",
                dataType: "xml",
                data: xmlData,
                complete: onSuccess,
                error: function (xhr, ajaxOptions, thrownError) {
                    alert("error: " + xhr.statusText);
                    alert(thrownError);
                },
                contentType: "text/xml; charset=\"utf-8\""
            });
            req.fromPage = fromPage;
        req.toPage = toPage;

私の問題は、私のページが nullでreq.fromPage = fromPage;あるためエラーになることです。req

jsonp 呼び出しを ajax メソッドの呼び出しに置き換えることができると考えるのは間違っていますか? コードが実行されるまでに ajax 呼び出しが終了していないため、req が設定されていませんか? これらの問題のいずれかを回避するにはどうすればよいですか?

最後の 2 行をコメントアウトし、それらの値を別の場所にハードコードすると、すべて正常に動作します。

4

2 に答える 2

1

jsonp呼び出しをajaxメソッドの呼び出しに置き換えることができると考えるのは間違っていますか?

いいえ、問題なく動作するはずです。

コードが実行されるまでにajax呼び出しが終了していないため、reqが設定されていないだけですか?

はい、その通りです。

ajaxメソッドはリクエストを開始し、すぐに戻ります。応答が到着した後に何かをしたい場合は、successイベントハンドラーでそれを行う必要があります。

エラーが発生した場合でもイベントが発生するため、実際にはsuccessイベントの代わりにイベントcompleteを使用することをお勧めします。complete

設定でajax呼び出しに応答を待機させるように指定できますが、これは、待機中にブラウザーがフリーズすることを意味します。async: false,

于 2011-06-30T21:49:46.277 に答える
0

Guffa 述べたよう$.ajax()に、非同期で動作します。したがって、返されたものをそのまま使用するのではなく、リクエストが応答を返したときに呼び出されるコールバック$.ajax()を指定する必要があります。

指定できるコールバック メソッドがいくつかあります。

  • complete- ステータスに関係なく、応答を受信すると実行されます。
  • success- 成功のステータス コード (通常は 200) を含む応答を受信したときに実行されます。
  • error- エラー コード (404 または 500 など) を含む応答を受信したときに実行されます。

リクエストが成功した後にレスポンスボディで何かをするには、次のようにする必要があります

$.ajax({
    ...
    success: function(body) {
        alert('This is the method body:' + body);
    }
});

さまざまなメソッドに関するドキュメントを読んで、使用できるその他のパラメーターを確認してください。

于 2011-06-30T21:58:57.693 に答える