問題:
次のスクリプトがあります。基本的には、ajax 呼び出しからデータを取得し、データを関数に渡し、データの ID をグローバル変数に格納するため、jQuery から取得した別のスクリプトでグローバル変数を使用できます$.getScript()
。
スクリプト (script1.js):
このビットは ajax を介してデータのビットを取得するだけですが (表示されていません)、データは含まれており、データの長さに基づいて関数をwidget_data.d
実行する必要があります。この場合は 3 回の反復です。getWidgetContent()
widget_data.d
window.global_widget_id = "";
for ( j = 0; j <= widget_data.d.length - 1; j++ ) {
getWidgetContent( widget_data.d[j] );
}
上記のループが実行する関数は次のとおりです。
function getWidgetContent( widget ) {
if(widget.script!=null){
window.global_widget_id = widget.widget_id;
$.getScript( "js/script2.js", function() {
alert( "direct title variable in script1.js: " + widget.title );
alert( "global variable in script1.js: " + window.global_widget_id );
alert( "direct variable in script1.js: " + widget.widget_id );
$( ".widget_header_title_" + widget.widget_id ).append( widget.title );
});
}
}
スクリプト (script2.js):
これは、上記の関数がグローバル変数も渡すスクリプトであり、グローバルに保存された ID に基づいて ajax 経由でデータを取得する必要があります。
var my_widget_id = window.global_widget_id;
alert( "global variable in script2.js " + window.global_widget_id );
alert( "direct variable in script2.js: " + my_widget_id );
// then do some more ajax stuff with global_widget_id before repeating the loop again.
実績:
global variable in script2.js: 66
direct variable in script2.js: 66
direct title variable in script1.js: title for 57 goes here
global variable in script1.js 66
direct variable in script1.js 57
global variable in script2.js: 66
direct variable in script2.js: 66
direct title variable in script1.js: title for 65 goes here
global variable in script1.js 66
direct variable in script1.js 65
global variable in script2.js: 66
direct variable in script2.js: 66
direct title variable in script1.js: title for 66 goes here
global variable in script1.js 66
direct variable in script1.js: 66
予想された結果:
global variable in script2.js: 57
direct variable in script2.js: 57
direct title variable in script1.js: title for 57 goes here
global variable in script1.js 57
direct variable in script1.js 57
global variable in script2.js: 65
direct variable in script2.js: 65
direct title variable in script1.js: title for 65 goes here
global variable in script1.js 65
direct variable in script1.js 65
global variable in script2.js: 66
direct variable in script2.js: 66
direct title variable in script1.js: title for 66 goes here
global variable in script1.js 66
direct variable in script1.js: 66
私が試したこと:
このウェブサイトに基づいて、generator function
. テンプレートは次のとおりです。
(function(variable) {
return function() {
// do something with variable
}
})(value);
私はこれを使用してみましたが、何も起こらず、エラーもアラートも何も起こりません。
for ( j = 0; j <= widget_data.d.length - 1; j++ ) {
var the_data = widget_data.d[j];
(function(the_data ) {
return function() {
getWidgetContent( the_data );
}
})(the_data);
}
質問:
ジェネレーター機能が動作しないのはなぜですか?