var not accessible/visible within $.getJSON

var not accessible/visible within $.getJSON

首先,我是一个新手。除了 "if-else" 部分的 "if" 部分,下面的代码有效。提醒的 "searchTerm" 是用户在具有多个值的输入字段中输入的最后一个值。因此,如果用户输入 "a, b, c, d",并且 "a"(或任何其他值)满足 ===0 条件,则 "d" 会被提醒。

我在这里研究了 Whosebug 并搜索了其他领域并了解了回调和承诺,并且 .getJSON 是异步的并且在 JSON 之外可见,但我不得不承认我'我显然没有得到它,我确定我错过了一些简单的东西。任何 insight/help 将不胜感激。

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****
        }
     }
  }

您的问题是 for 循环没有等待您的异步 getjson。 Searchurl 和搜索词被每次迭代覆盖。这就是为什么你总是得到最后的搜索词。编写一个函数并从中传递所有搜索 url 和回调。

我希望这会引导您找到解决方案。

PS:您的函数定义也在 for 循环内,这不是首选。

我继续将函数从 for 循环中分离出来,然后将 .getJSON 包装在它自己的函数中并传递 searchURL 和 searchTerm 参数,这使我能够使用满足条件的 searchTerm .

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