Глобальная переменная не установлена в jquery
$(function(){
var bwr_w = null; //global variable
//below function gets the dynamic data
function myfunc() {
var val = '2011'
$.ajax({
type: "POST",
url: "allmaps.php",
data: "year="+val ,
cache: false,
success: function(result){
bwr_w= result.replace(/\s+/g, ''); //want to set the data again
}
});
}
myfunc(); //my dynamic function gets called
$(".container_map").mapael({
map : {
name : "usa_states"
},
plots: {
bwr_w //this should work as per myfunc()
}
});
});
Я всегда получаю значение bwr_w как ноль, даже если я получаю некоторое значение в возвращении ajax, я хочу, чтобы мой bwr_w был установлен как глобальная переменная, чтобы, когда я получаю некоторый результат от ajax, он менял мои выводы карты.
2 ответа
Решение
Проблема в том, что $.ajax
вызов асинхронный. Это означает, что ваш myfunc
завершается до того, как данные возвращаются из вызова AJAX. Чтобы устранить эту проблему, поместите весь код, зависящий от возвращаемых данных, в обратный вызов:
$(function () {
var bwr_w = null; //global variable
//below function gets the dynamic data
function myfunc() {
var val = '2011'
$.ajax({
type: "POST",
url: "allmaps.php",
data: "year=" + val,
cache: false,
success: function (result) {
bwr_w = result.replace(/\s+/g, ''); //want to set the data again
$(".container_map").mapael({
map: { name: "usa_states" },
plots: { bwr }
});
}
});
}
myfunc();
});
Если вы хотите, чтобы при каждом вызове выполнялась другая логика myfunc
передать его как функцию обратного вызова:
$(function () {
//below function gets the dynamic data
function myfunc(callback) {
var val = '2011'
$.ajax({
type: "POST",
url: "allmaps.php",
data: "year=" + val,
cache: false,
success: function (result) {
var bwr_w = result.replace(/\s+/g, ''); //want to set the data again
callback(bwr_w);
}
});
}
myfunc(function (bwr) {
$(".container_map").mapael({
map: { name: "usa_states" },
plots: { bwr }
});
});
});
Посмотреть здесь
$(function(){
var bwr_w = null; //global variable
//below function gets the dynamic data
function myfunc(then) {
var val = '2011'
$.ajax({
type: "POST",
url: "allmaps.php",
data: "year="+val ,
cache: false,
success: function(result){
then && then(result);
}
});
}
myfunc(function() {
bwr_w= result.replace(/\s+/g, ''); //want to set the data again
$(".container_map").mapael({
map : {
name : "usa_states"
},
plots: {
bwr_w //this should work as per myfunc()
}
});
});
});