Ajax Potrzeba czasu, aby zakończyć. Wykonywanie funkcji nie zajmuje prawie tyle samo czasu. Więc zanim dojdziesz do alertu poza żądaniem ajax, żądanie ajax nadal wykorzystuje czas do zakończenia (w transmisji lub w działaniach po stronie serwera).
Zawsze możesz poczekać na zakończenie metody ajax.
$(document).ready(function() {
var global_arr = new Array();
var complete = false;//flag to wait for ajax completion
$.ajax({
url: 'result.php',
type: 'post',
dataType: 'json',
success: function(data) {
$.each(data, function(key, value) {
global_arr.push(value.name);
});
alert(global_arr); //get correct value, works fine
complete = true;//mark ajax as complete
}
}); //end of ajax function
(function runOnComplete(){
if(complete){//run when ajax completes and flag is true
alert(global_arr);
}else{
setTimeout(runOnComplete,25);//when ajax is not complete then loop
}
})()
});
Jednak najczęstszym sposobem jest użycie wywołania zwrotnego.
$(document).ready(function() {
function runOnComplete(){//code executes once ajax request is successful
alert(global_arr);
}
var global_arr = new Array();
$.ajax({
url: 'result.php',
type: 'post',
dataType: 'json',
success: function(data) {
$.each(data, function(key, value) {
global_arr.push(value.name);
});
alert(global_arr); //get correct value, works fine
runOnComplete();//callback
}
}); //end of ajax function
});
Nasze ulubione pytanie, połączenia asynchroniczne! – epascarello