var $ .getJSON中无法访问/可见

时间:2017-07-01 21:45:01

标签: javascript callback getjson

首先,知道我是一个非常新的菜鸟。除了“if-else”部分的“if”部分之外,下面的代码有效。提醒的“searchTerm”是用户输入具有多个值的输入字段的最后一个值。因此,如果用户输入“a,b,c,d”和“a”(或任何其他值)符合=== 0标准,则“d”将被警告。

我已经在stackoverflow中进行了研究并搜索了其他领域并了解了回调和承诺,而且.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****
        }
     }
  }

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我继续将这些函数与for循环分开,然后将.getJSON包装在它自己的函数中,并传递了searchURL和searchTerm参数,这些参数允许我使用满足条件的searchTerm。 / p>

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