javascript错误:TypeError:str未定义

时间:2014-07-16 21:43:11

标签: javascript jquery json

我正在尝试从JSON数组对象中提取一些值,但是我收到了该错误消息。

var i = 0;
while (i < n) {
    $.get("counter.html").done(function (data2) {
        var $html = $("<div>").html(data2);
        var str = json.affiliates[i];
        $html.find("#coupon").html(str.affiliate_name);
        $html.find("#coupon_id").html(str.affiliate_id);
        $(".col-sm-4").append($html);
    });
    i++;
}

这是我的json:

{
    "affiliates": [
        {
            "affiliate_name": "a1",
            "affiliate_id": "0"
        },
        {
            "affiliate_name": "a2",
            "affiliate_id": "0"
        },
        {
            "affiliate_name": "a3",
            "affiliate_id": "0"
        }
    ],
    "status": "success"
}

4 个答案:

答案 0 :(得分:0)

而不是while循环触发大量请求而没有保证完成订单甚至完成 - 等到完成后,递增你的计数器,如果需要 - 再次打电话:

ajax(0);
function ajax(i) {
    $.get("counter.html").done(function(data2) {
        var $html = $("<div>").html(data2);
        var str = json.affiliates[i];
        $html.find("#coupon").html(str.affiliate_name);
        $html.find("#coupon_id").html(str.affiliate_id);
        $(".col-sm-4").append($html);

        if (i < n) ajax(++i)
    });
}

答案 1 :(得分:0)

我认为这可行:

var i=0;
while(i<n){
    (function(j) {
        $.get("counter.html").done(function (data2) {
            var $html = $("<div>").html(data2);
            var str = json.affiliates[j];
            $html.find("#coupon").html(str.affiliate_name);
            $html.find("#coupon_id").html(str.affiliate_id);
            $(".col-sm-4").append($html);
        });
    })(i);
    i++;
}

答案 2 :(得分:0)

我没有被正确考虑。使用闭包:

var i = 0;

while (i < n)
{
    (function (index) { // outer closure to factor "i"

        $.get("counter.html").done(
            function(response_data) {
                var $html = $("<div>").html(response_data);
                var str = json.affiliates[index];
                $html.find("#coupon").html(str.affiliate_name);
                $html.find("#coupon_id").html(str.affiliate_id);
                $(".col-sm-4").append($html);
            }
        );

    }(i)); // closure

    i++;
}

答案 3 :(得分:0)

请在此处指明 json 是什么,根据我的说法,如果将while循环的内容封装在像

这样的函数中会更好
(function(i){
$.get("counter.html").done(function(data2) {
    var $html = $("<div>").html(data2);
    var str = json.affiliates[i];
    $html.find("#coupon").html(str.affiliate_name);
    $html.find("#coupon_id").html(str.affiliate_id);
    $(".col-sm-4").append($html);
  });
  i++;
})(i)

因为调用本质上是异步的,并且可能产生混乱的输出。