1

これは本当に私を取得しています:

for(var i=0; i<10; i++) {
   (function(x) {     //use a closure to hold the "i" value
       request(arg[x], function(n) {
          //do something with the data returned from $getJSON
          console.log(n);
       });
   })(i)  //is this syntax correct?
}

function request(argX, callback) {    //is this syntax correct?
     $getJSON(parameter) { 
         //get request result
         ... 
     }
     callback(); //after request() function is completed, trigger the callback function
                 //is this syntax right? 

}

コールバック関数を使用している理由は、getJSON からの結果を操作したいためです。そのため、リクエスト関数が完了するのを待つ必要があります。

また、コールバック関数をループ インデックスの "i" 値にバインドする必要があります。

かなり長い間構文をプレイしてきましたが、コンソール ログから何も返されなかったのはなぜですか? $getJSON が完了する前に、コールバック関数が実行されなかったか、実行されなかったようです。

専門家の助けが必要です!

4

2 に答える 2

2

ajax呼び出しが完了したら、コールバック関数を実行する必要があります。

for(var i=0; i<10; i++) {
   (function(x) {
       request(arg[x], function(n) {
          console.log(n);
       });
   })(i);
}

function request(argX, callback) {
     $.getJSON('/url/json/', callback); //reference callback function
}
于 2013-02-03T22:07:17.497 に答える
2

getJSON呼び出しは非同期であるため、応答が到着する前に関数を呼び出すことになりますcallback

また、への呼び出しの後にコードのブロックがありますgetJSON。その中のコードは、結果が到着した後も呼び出されません。これは、呼び出し後、および結果が到着する前に実行される単なる別個のブロックです。

コールバック関数をパラメータとして次の呼び出しに配置しgetJSONます。

function request(argX, callback) {
  $getJSON(parameter, callback);
}
于 2013-02-03T22:08:02.203 に答える