Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON数据在脚本的一部分工作,但不在另一部分工作_Json_Jquery_Jquery Selectors - Fatal编程技术网

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

JSON数据在脚本的一部分工作,但不在另一部分工作,json,jquery,jquery-selectors,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() {

我有以下脚本,由于某些原因无法运行:

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

        }

    }

}
错误消息是:

Cannot read property 'widget_id' of undefined
但奇怪的是,以下警报工作正常并返回正确的值:

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

我做错了什么?

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

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

你能告诉我们html和is widget_header_类吗?在我这么做之前,我只是尝试了.getScript中的警报,它们停止工作,它们给出了相同的错误。一旦我将警报移出.getScript,警报就开始工作…你能给我们看一下html和widget_header_类吗?在我这么做之前,我只是尝试了.getScript中的警报,它们停止工作,它们给出了相同的错误。一旦我将警报移出.getScript,警报就会开始工作……这会确保在使用小部件_id之前加载脚本吗?@oshirowanen将发生的事情是,每个函数调用的小部件对象都不同。widget_id将与作为参数提供的widget关联。以前,它试图使用异步调用返回的值,而不是调用getScript时的值。请看这个问题:这会确保在使用widget_id之前加载脚本吗?@oshirowanen将发生的是,对于每个函数调用,widget对象都是不同的。widget_id将与作为参数提供的widget关联。以前,它试图使用异步调用返回的值,而不是调用getScript时的值。见这个问题: