我有一个jQuery回调函数。在该函数中,我希望它更改更高范围内的变量的值,但由于某种原因,它不会这样做。这是代码:
function add() {
var returnedData = {
my_id: 0
};
$.post("add_event.php", { event : toSendText }, function(data) {
returnedData.my_id = 5;
}, "json");
if(add_page == true){
alert(returnedData.my_id);
window.open('content-list.php?cal_id=');
}
}
答案 0 :(得分:2)
问题是$.post()
是异步的,因此returnedData.my_id = 5;
发生在<{strong> 后alert()
发生的情况(数据稍后会从服务器返回) ,当请求完成时)。
要使这项工作符合您的要求,您需要在数据可用后继续使用回调,例如:
function add() {
$.post("add_event.php", { event : toSendText }, function(data) {
if(data.add_page == true) {
//use data in some way here presumably
window.open('content-list.php?cal_id=' + data.id); //maybe this?
}
}, "json");
}
答案 1 :(得分:0)
jQuery.ajax( settings )
异步 布尔 默认:true
默认情况下,发送所有请求 异步(即设置为true) 默认情况下)。如果你需要同步 请求,将此选项设置为false。 跨域请求和dataType: “jsonp”请求不支持 同步操作。注意 同步请求可能是暂时的 锁定浏览器,禁用任何 请求处于活动状态时的操作。
http://api.jquery.com/jQuery.ajax/
默认情况下,jQuery.post( settings )
不会传递参数async
,因此会假设true
这是一个简写的Ajax函数, 这相当于:
$.ajax({
type: 'POST',
url: url,
data: data,
success: success
dataType: dataType
});