これで、ajaxを通過した後systemPathのグローバル変数を変更することができないようです。これはAjax内部で動作しますが、 ajaxの外部で変数を更新しました。基本的に私はxmlから一連のパスを作成し、それらを使ってテーブルを生成できる他のxmlファイルを探し出そうとしています。グローバル変数はAJAXの成功関数内から更新されません
ここで何が起こっているか知っていますか?変数が設定される前にajaxが実行されるので、なぜajaxの後に配列の長さが0になるのですか?
var systemPath = new Array();
var techDigestArr = new Array();
var addToArray = function(thisarray, toPush){
thisarray.push(toPush);
}
$.ajax({
url: fullPath+"technical/systems/systems.xml",
dataType: ($.browser.msie) ? "text" : "xml",
success: function(data){
var xml;
if (typeof data == "string") {
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.loadXML(data);
} else {
xml = data;
}
$(xml).find("system").each(function(){
var urlString = fullPath + "technical/system_" + $(this).attr("id") + "/" + $(this).attr("id") + "tech-digest.xml <br />";
//alert(urlString);
$("#td-articles").append(systemPath.length + urlString);
addToArray(systemPath,urlString);
//systemPath.push(urlString);
});
$("#msg-output").append("total - " +systemPath.length);//Returns 48
},//END SUCCSESS
error: function(){
alert("Sorry - ");
history.go(-1);
}
});//END AJAX CALL
$(document).ready(function(){
//$("#msg-output").append("total - " + systemPath.length); Returns 0
});
:
ただ、あなたはグローバル変数を使用すると、タイムアウトを設定することができます更新されることがわかりますページの後半でそれらを使用することができますか? –
成功したコールバックからのみアクセスするのが理想的です。しかし、ユーザーのやりとり(クリックなど)でそれらにアクセスする必要がある場合は、現在行っているようにグローバルに保存することができます。これに対処するには、データが受信されたときにのみクリックハンドラを設定し、その時点までリンクに何もしないでください。 –
[jsFiddle example](http://jsfiddle.net/danmana/y6XgY/)あなたの状況の、より良い流れを理解することができます –