3

ローカル フォルダーに pageTest.html があります。このページは、次の Ajax コードを使用して service.ashx?i=... (戻り値のパラメーターが +1 ずつ渡されます) を呼び出します。

.
.
getIncr: function(parameters, success){
       $.ajax({
               async: false, 
               type: methodType,
               url: getTarget,
               data: "n="+parameters,
               dataType:"jsonp",
               success: success
             });
    }
.
.

HTMLページは、この関数をm回呼び出します(スクリプトを使用して..):

  .    
  var start = function(){
  .
  .
  var val = 0;
  .      
  .
  for(i=0; i<m; i++)
  {
      Foo.getIncr(val, function(returned_n){
          val = returned_n;
      });

  }

};

ページの読み込み中、呼び出しは「非同期モード」で実行されますが、Ajax で「 async: false 」を設定します。この問題について読んだところ、別のドメインにある場合、Ajax が page.html から service.ashx への呼び出しを同期できないという理由が見つかりました。page.html でその service.ashx (別のドメイン) への同期呼び出しを実行するためのソリューションはありますか?

4

2 に答える 2

6

問題は、同期 JSONP リクエストを作成できないことです。その実装方法は、Andy が指摘したように、いわゆる「スクリプト タグ ハック」によるものです。スクリプト タグが埋められるのを待っている間、jQuery が JavaScript アプリケーションの実行を停止する方法はありません。

したがって、JSONP リクエストを作成するために jQuery の正しいメソッドを呼び出していますが、JSONP であるため、非同期オプションは適用されず、それを回避する方法はありません。リクエストを非同期で処理する必要があります。

ちなみに、 $.ajax を同期モードで使用するのは得策ではありません。リクエストが完了するまでに時間がかかりすぎると、ブラウザが停止し、ページが応答していないというポップアップがユーザーに表示される可能性があります。

于 2009-03-15T23:13:29.280 に答える
1

XMLHttpRequest クロスドメインはまったく使用できません。同期か非同期かは関係ありません。

JSON(およびjsonp)を使用しているように見えるので、スクリプトタグハックを介して目的を達成できるはずです。jQueryにはこれが組み込まれていると思います(ちなみに使用しているのはjQueryですか?):

http://docs.jquery.com/Release:jQuery_1.2/Ajax#Cross-Domain_getJSON_.28using_JSONP.29

于 2009-03-10T18:44:10.750 に答える