JSON数据在脚本的一部分中工作,但在另一部分中不起作用

时间:2012-11-14 16:47:56

标签: json jquery jquery-selectors

我有以下脚本由于某种原因无效:

success: function( widget_data ) 
{ 

    if( widget_data.d[0] ) {

        var j = 0;

        for ( j = 0; j <= widget_data.d.length - 1; j++ ) {

            $.getScript( "js/" + widget_data.d[j].script, function() {

                // this line is complaining about .widget_id
                alert(widget_data.d[j].widget_id);
            });

            // but this line works fine...
            alert(widget_data.d[j].widget_id);

        }

    }

}

我在以下行收到错误,其中一行有.getScript

alert(widget_data.d[j].widget_id);

错误消息是:

Cannot read property 'widget_id' of undefined

但奇怪的是,以下警报可以正常工作并返回正确的值:

alert(widget_data.d[j].widget_id);

我做错了什么?

1 个答案:

答案 0 :(得分:4)

getScript调用异步捕获变量j而不是它在调用时的值。这意味着j可能具有在调用返回时终止循环的值。您应该在函数中调用getScript,以便捕获j的值而不是它的引用。实际上,实际捕获“窗口小部件”对象本身可能更好,正如您在代码示例中看到的那样。

success: function( widget_data ) 
{ 

    if( widget_data.d[0] ) {

        var j = 0;

        for ( j = 0; j <= widget_data.d.length - 1; j++ ) {

            getWidgetScript( widget_data.d[j] );

            alert(widget_data.d[j].script);

            // but this line works fine...
            alert(widget_data.d[j].widget_id);
            alert(widget_data.d[j].title);

        }

    }

}

function getWidgetScript(widget) {
    $.getScript( "js/" + widget.script, function() {
        $( ".widget_header_" + widget.widget_id ).text( widget.title );
    });
}