2017-07-01 4 views
0

最初に、私は非常に新しいnoobです。以下のコードは、 "if-else"部分の "if"部分を除いて動作します。アラートされる「searchTerm」は、ユーザーが複数の値を持つ入力フィールドに最後に入力した値です。したがって、ユーザが「a、b、c、d」および「a」(または他の任意の値)を入力して=== 0基準を満たす場合、「d」は警告されるものである。

私はここでstackoverflowで調査し、他の分野でGoogleのコールバックと約束について学びました。そして、.getJSONはJSON以外の非同期で可視性がありますが、明らかに私はそれを得ていないと私は確信しています私は何か簡単なものを欠いている。どんな洞察力/助けも大いに感謝されます。

for (var l = 0; l < searchTermArray.length; l++) { 
    searchTerm = searchTermArray[l]; 
    searchURL = buildURL(searchTerm); 
    getResults(searchURL, searchTerm); 
    function getResults() { 
     $.getJSON(searchURL, function (responses) { 
      presentResults(responses, searchTerm); 
     }); 
    } 
    function presentResults(responses, searchTerm) { 
     response = responses.search; 
     if (responses.search.return.count === 0) { 
      alert(searchTerm + " Not Found"); 
     } else { 
      alert("Results found"); 
      ****Do other stuff with the results**** 
     } 
    } 
    } 
+0

何が問題ですか?私はあなたの問題を理解していないのですか?もし動作していれば、それ以外は? – Volem

+0

@ Vololeの問題は、if文内の "searchTerm"に警告するときに値が=== 0の基準を満たしていないことです。むしろ、警告された値は入力された値の最後の値です。したがって、4つの値が入力され、2番目の値=== 0の場合は、最後の値が警告されます。したがって、ifで正しく入りますが、searchTermの値が正しくありません。 – Tom

+0

ご説明いただきありがとうございます – Volem

答えて

0

私は先に関数をforループから分離して、それ自身の関数で.getJSONをラップし、searchURLとsearchTermパラメータを渡しました。これにより、条件を満たすsearchTermで動作することができました。

function getResults(searchURL, searchTerm) { 
    responses = ''; 
    $.getJSON(searchURL, function (responses) { 
     presentResults(responses, searchTerm); 
    }); // close JSON 
} 
0

あなたの問題は、forループが非同期getjsonを待っていないことです。 Searchurlと検索語はすべての繰り返しで上書きされます。そのため、あなたは常に最後の検索語を取得します。関数を作成し、それからすべての検索URLとコールバックを渡します。

これが解決策につながることを願っています。

PS:関数定義も、forループ内にありますが、これは好ましくありません。

関連する問題