【问题标题】:Jquery GET method inside a loop循环内的Jquery GET方法
【发布时间】:2021-04-02 03:52:34
【问题描述】:

我有一个链接数组,其中包含一个 url,所以我需要调用“get”,等待响应并从中提取我想要的内容并将图像的 src 设置为我返回的内容

我面临一个问题,当第一个“获取”准备好时,循环已经完成,所以基本上循环的每次迭代都会得到最后一个“数据”响应。基本上,只有 i 的最后一次迭代会得到一个值,即使这并不总是正确的答案。这只是回来的最后一个答案

我该如何解决这个问题?

for(i of instructors) {

    jQuery( document ).ready($.get( i["image-link-post"], function( data ) {

        i['image-link'] = data.guid.rendered;
    }));
}

【问题讨论】:

  • 您能否提供最小的可重现示例。并提供一个预期输出的例子..

标签: javascript html jquery loops


【解决方案1】:

由于循环正在处理异步调用,因此迭代不会等待 ajax 调用完成,因此当 ajax 调用收到响应时,i 正在指向其他一些迭代项。在这种情况下,我们需要维护一个迭代项的局部变量,然后将局部引用传递给 ajax 响应处理程序。使用以下重构代码结帐:

// Changed var image to let image
for (i of instructors) {
    let image = i;
    jQuery(document).ready($.get(image["image-link-post"], function (data) {
        image['image-link'] = data.guid.rendered;
    }));
}
// Below code also works
for (i of instructors) {
    (function (image) {
        jQuery(document).ready($.get(image["image-link-post"], function (data) {
            image['image-link'] = data.guid.rendered;
        }));
    }(i));
}

【讨论】:

  • 感谢您的评论,但不幸的是它产生了相同的行为。我相信由于 image 是通过引用设置为 i 的,并且 i 本身会发生变化,因此图像也会不断变化:/
  • @Bardia 我已经更新了代码。由于var 使变量成为全局变量,因此它会在迭代范围内全局更新。在这种情况下,需要对图像使用let,以便其定义仅限于单次迭代范围。我还添加了另一种具有作用域功能的方法。请检查一次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 1970-01-01
  • 2018-08-05
相关资源
最近更新 更多