0

each私はステートメントで複数のajaxを通過しています:

$('.product').each(function () {
      var product = $(this).attr('data-product');
      $.ajax({
          url:"/ajax/product",
          data:"lookup=" + product,
          success: function () { /* callback */ }
      });
});

現在eachループにある5つの製品があります。

私の問題は、submitこれらのajaxルックアップがすべて完了するまで、ユーザーがフォームボタンを押すことができないことです。ajax呼び出しは、外部APIを呼び出すため、毎回処理に時間がかかります。具体的には、submitボタンを押すことはできますが、すべてのajax機能が完了したように見えるまで何も実行されません。

ユーザーがフォームを送信したい場合、ajax呼び出しを揮発性にする/応答を待たないようにするにはどうすればよいですか?

4

3 に答える 3

1

これを利用setTimeout()して、別のスレッドで呼び出しを行う必要があります。

$('.product').each(function() {
      setTimeout(function () {
         var product = $(this).attr('data-product');
         $.ajax({
            url:"/ajax/product",
            data:"lookup=" + product,
            success: function () { /* callback */ }
         });
    });
});

jQuery.deferredは、コードが非同期で実行される同様の機能を許可します。

于 2012-12-13T11:55:32.440 に答える
0

関数にコールバックを渡すだけで、準備ができたときにデータを処理できます。

myFunction: function(callback) {
    $.get(myUrl, function(data) {
        callback( data );
    });
}

または、次のようにしてみてください。

$('.product').each(function () {
      var product = $(this).attr('data-product');
      $.ajax({
          url:"/ajax/product",
          data:"lookup=" + product,
          async:true,
          success: function () { /* callback */ }
      });
});
于 2012-12-13T11:51:38.113 に答える
0

ユーザーはsubmitいつでもボタンを押すことができ、フォーム内のすべてを送信するという、本来の機能を実行します。

実際に行う必要があるのは、AJAXリクエストを開始する前後に送信ボタンを含むフォームに入力することですが、コールバック内には入力しません。

このようにして、ユーザーはsubmitいつでもボタンをクリックできます。

于 2012-12-13T11:53:24.200 に答える