2016-07-10 12 views
2

私のスクリプトは約15のajaxコールを自分のサーバーに送信します。私はそれらを並行して実行したい。私はwhenを使用してAjaxリクエストの束を並行して実行しようとしていますが、何らかの理由でこれを1つずつ実行しています。

私のコードは以下の通りです:

var requests = $.map(results, function(result, i) { 
    var suggestionContainer = $('<div class="suggestion-' + i + '">' + result + '</div>'); 
    resultsContainer.append(suggestionContainer); 

    return $.get('check.php', { keyword: result }).done(function(res) { 
     res = JSON.parse(res); 
     suggestionContainer.append(generateSocialMediaList(res.social_media)) 
          .append(generateDomainList(res.domains)); 
    }).fail(function() { 
     suggestionContainer.remove(); 
    }); 
}); 

$.when(requests).done(function() { 
    console.log('Complete') 
}, function() { 
    alert('Something Failed'); 
}); 

は私が間違ってやっているものはありますか?

私が15リクエストを行う理由は、check.phpが第三者APIを呼び出すためです。 APIは遅く、残念ながら代替手段はありません。 1つのリクエストよりも15個の並列リクエストを行うほうがはるかに速く、check.phpが完了するまで待ちます。 (問題を解決するために必須ではありませんとそれが含まれていない)suggestions.phpへの要求がなされた

  1. コードはそうのように動作します。結果は配列resultsに格納されます。

  2. 結果(約15)が返され、mapで反復処理されます。
  3. 提案をページに挿入します。私は約束を返す。
  4. requestsアレイには現在10〜15の約束が含まれています。
  5. 私はwhenを使ってリクエストを並行して実行します(これは少なくとも私がやろうとしていることです)。
  6. DOMが更新され、check.phpの結果がDOMに挿入されます。
+0

最初に15 httpリクエストを発行する理由を教えてください(jsとcssのアセットについては話しません)。 – Ismail

+0

'requests'に' $ .get() 'ajaxリクエストの配列が含まれています。 APIサーバの 'php'スクリプト呼び出しは順番に実行されなければならないので、私は15回リクエストしています。バルクリクエストは受け付けません。 APIも遅いので、ユーザーが15をすべて完了するのを待たせるのではなく、15回の別々の呼び出しを行います。 – BugHunterUK

+0

@hamismまた、リクエストはすぐには起こっていません。ユーザーがボタンを押したときに発生します。問題の原因となっている関連するコードのみが含まれています。 – BugHunterUK

答えて

2

あなたのコードは、ブラウザと同じ程度の並列性でリクエストを実行します。

ブラウザは、1つのドメインへの同時要求を6に制限するために使用されます。これは変更されている可能性があります。 JavaScriptがシングルスレッドで、これはあなたが見ているものであるため、これらの要求に

応答は、一つ一つをサービスされます。

また、AJAXコールが失敗していないことを再確認してください。 whenは、約束が拒否されるとすぐに拒否します。

+0

それは意味があります。失敗した場合、成功したリクエストは '.done'にあるように' .fail'メソッドに渡されますか? – BugHunterUK

+0

私はそうは思わない。エラーは代わりに渡されます。 – Ben

関連する問題