【问题标题】:var not accessible/visible within $.getJSONvar 在 $.getJSON 中不可访问/可见
【发布时间】:2017-12-05 13:08:55
【问题描述】:

首先,要知道我是个新手。除了“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****
        }
     }
  }

【问题讨论】:

  • 您遇到了什么问题?我不明白你的问题?如果可以,但如果不可以???
  • @Volem ,问题是当我在 if 语句中提醒“searchTerm”时提醒的值不是满足 ===0 条件的值。相反,警报值是输入值中的最后一个值。因此,如果输入了 4 个值并且第二个值 ===0,无论如何,最后一个值是被警告的值。所以它在 if 中正确进入,但 searchTerm 的值不正确。
  • 知道了,抱歉打扰您重新解释

标签: javascript callback getjson


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-08-17
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多