1

我有以下脚本由于某种原因无法正常工作:

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);

        }

    }

}

我在以下行出现错误,其中一个 withing .getScript

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

错误信息是:

Cannot read property 'widget_id' of undefined

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

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

我究竟做错了什么?

4

1 回答 1

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 );
    });
}
于 2012-11-14T16:51:49.140 回答