0

.load()for ループを使用してさまざまなページをロードし、その情報の一部を に保存する Greasemonkey スクリプトを作成しようとしていますlocalStorage。私の問題:.load()非同期であるため、うまく機能しません。私のスクリプトは、保存しようとしている Last 値を保存するだけです。var iこれは、コールバック関数内で使用しているためだと思います。コールバック関数が起動されると、iすでに別の値があります。

for (var i = 0; i < plantsDiv.length; i++)
{
   objectid = plantsDiv[i].getAttribute('objectid');    
   $("#wrap").load("index.php?objectid="+ objectid,function(){
      //[...] what is happening
      window.localStorage.setItem(objectid,value);
   });
}

alert("foo")コールバック関数と for ループの最後の間に挿入すると.load、アラート ウィンドウで [OK] をクリックしている間に関数が読み込まれるため、すべてが機能します。.load全体が実行されるまで for ループを待機させる方法はありますか?

助けてくれてありがとう、そして私の悪い英語でごめんなさい:)

4

2 に答える 2

1

load()関数は関数とほとんど同じですget()-

この方法は、サーバーからデータをフェッチする最も簡単な方法です。$ .get(url、data、success)とほぼ同じですが、グローバル関数ではなくメソッドであり、暗黙のコールバック関数がある点が異なります。

もう少し詳細な関数を使用することで、falseに設定して同期するajax()リクエストを指定できます。おそらくこれはあなたの問題を解決するでしょう。async

単純な同期ajax呼び出し:

$.ajax({
  url: "example.php",
  data : yourData,
  async : false
},function(response){
  // this is the callback
});

参考文献-

于 2013-02-19T19:29:33.820 に答える
0

目的がコンテンツを要素にロードせず、代わりにコンテンツを取得してlocalStorageに保存することである場合は、$。get(またはデータを投稿する場合は$ .post)を使用する必要があります。

jQuery ajax関数は、Deferredオブジェクトから派生したjqXHRオブジェクトを返すため、成功には.done()を使用し、失敗には.fail()を使用できます。

$.get("index.php?objectid="+ objectid)
.done(function(data) {
    window.localStorage.setItem(objectid,data);
})
.fail(function() {
    // try again later?
});

編集:リクエストは引き続き非同期で起動され、この場合、多数の並列リクエストがある可能性があることに注意してください。各リクエストの応答を受信すると、done(またはfail)ブロックのコードが実行されます。

于 2013-02-19T19:32:54.373 に答える