【问题标题】:Jquery binding loop variable to getJSON functionJquery 将循环变量绑定到 getJSON 函数
【发布时间】:2015-03-30 19:04:56
【问题描述】:

我有一个 for 循环,它获取一个 json 数组并将其与另一个列表的变量一起填充到一个表中。我的问题是我无法在 get 方法中访问 i 。但我里面有 mylist 及其所有内容。我尝试使用 bind(this,i) 将函数绑定到变量 i ,但这表示 .getJSON() 不是函数。这是相关代码。

var mylist = ["a", "b", "c"]
for (i = 0; i < mylist.length; i++) {

    urlstr = "/" + mylist[i]; // Generate url
    $.getJSON(urlstr, function(data) {
        html = "<tr><td>" + mylist[i] + "</td><td>" + data.string[0] + "</td></tr>";
        $("#tableresult").append(html); //this returns undefined for mylist[i]
        console.log(i); //this returns 3 which is the length of list
    });

}

简而言之,我需要在 getJSON 中可以访问 getJSON 之外的变量。 有人可以帮忙吗?谢谢和问候。

【问题讨论】:

  • 你似乎有一些字符串边界问题。
  • urlstr="/"+mylist[i]; . .试试这个
  • i3 的问题是您循环遍历项目,调用 getJSON,但在调用第一个回调之前,循环已经完成,导致 i 为 3对于每个回调。

标签: javascript jquery


【解决方案1】:

这应该与在几乎任何其他循环中绑定循环变量没有什么不同。由于您使用的是数组,因此最简洁的方法是使用 Array#forEach

var mylist = ["a", "b", "c"];
mylist.forEach(function (item) {
    var urlstr = "/" + item;
    $.getJSON(urlstr, function(data){
         var html = "<tr><td>" + item + "</td><td>" + 
                    data.string[0] + "</td></tr>";
         $("#tableresult").append(html);
        console.log(item);
    });
});

【讨论】:

  • 这很好用,但假设我在 getJSON 和这个函数之外还有一些变量,我将如何在里面访问它们?
  • 例如,我在 mylist 旁边还有另一个变量 myvar=5。我如何在里面访问它?
  • @Tania 你可以像往常一样使用它。只要在请求发生时它的值没有发生变化,就不应该成为问题。
  • 它说 myvar 未定义 @JLRishe
  • @Tania 你能告诉我你想在哪里使用它的代码吗?
【解决方案2】:

请确保您的 php 返回数据是 json。

例如:

$data['something'] = 'data';
echo json_encode($data);

并使用函数获取索引(i):

 $.getJSON("demo_ajax_json.js", function(result){
        $.each(result, function(i, field){
            $("div").append(field + " ");
        });
    });

【讨论】:

  • 好的,你试试看:$.each(result, function(i, field){ $("div").append(field + " "); });
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2019-11-30
  • 2010-12-13
相关资源
最近更新 更多