我有以下脚本由于某种原因无效:
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);
我做错了什么?
答案 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 );
});
}