【问题标题】:How to store data inside a javascript foreach "loop" so that it can be accessed outside of the "loop" [duplicate]如何在javascript foreach“循环”中存储数据,以便可以在“循环”之外访问它[重复]
【发布时间】:2015-08-30 14:11:04
【问题描述】:

我想将一些数据作为属性存储在 jquery foreach“循环”中的“randomImages”对象中(这个 randomImages 对象稍后将在另一个函数中使用)。但是我发现循环完成后数据丢失了(在ajax回调中,数据在那里)。这似乎是某种范围或上下文问题,但我不知道出了什么问题。我正在使用的确切代码如下。

var randomImages = {};

$.get('http://pixabay.com/api/?username=bhinbox0&key=8792f764c13d09a7b7d2&q=yellow+flower&image_type=photo', function (data) {
    $.each(data.hits, function (index, entry) {
        randomImages[entry.webformatURL] = 'center';
    });
    //randomImages.toSource() shows a lot of data here
});

$('p').text(randomImages.toSource()); //why is randomImages empty here?

【问题讨论】:

  • $.get() 是异步的。将最后一条语句放在$.get() 回调处理程序中。
  • @Ja͢ck 我需要在另一个函数中使用该数据,因此我需要将数据保留在变量 randomImages 中。
  • 把另一个函数作为回调函数。
  • 然后将“进一步向下”的内容也放入回调函数中。
  • Highly recommended question 在继续之前阅读。

标签: javascript jquery foreach


【解决方案1】:

问题是:您正在调用一个依赖于异步计算的函数,而无需等待它。将此计算移至 get 回调内部应该可以解决,因为数据在回调执行时可用。

var randomImages = {};
$.get('http://pixabay.com/api/?username=bhinbox0&key=8792f764c13d09a7b7d2&q=yellow+flower&image_type=photo', function (data) {
    $.each(data.hits, function (index, entry) {
        randomImages[entry.webformatURL] = 'center';
    });
    $('p').text(randomImages.toSource());

});

如果您需要将此数据用于N 函数,我建议您使用 Promises,但希望您需要将所有内容移至 $.get 回调中。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多