Javascript jQuery不会在回调中设置更高范围的对象
我有一个jQuery回调函数。在这个函数中,我希望它改变一个更大范围内的变量的值,但由于某种原因,它没有这样做。代码如下:Javascript jQuery不会在回调中设置更高范围的对象,javascript,jquery,scope,Javascript,Jquery,Scope,我有一个jQuery回调函数。在这个函数中,我希望它改变一个更大范围内的变量的值,但由于某种原因,它没有这样做。代码如下: function add() { var returnedData = { my_id: 0 }; $.post("add_event.php", { event : toSendText }, function(data) { returnedData.my_id = 5; }, "json");
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=');
}
}
问题是它是异步的,因此returnedData.my_id=5代码>发生在您的<代码>警报()发生后
发生(请求完成后,数据会在某个时间点从服务器返回)
要使此工作符合您的要求,您需要在数据可用后继续在回调中工作,如下所示:
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");
}
异步布尔
默认值:true
默认情况下,将发送所有请求
异步(即设置为true
默认情况下)。如果你需要同步
请求时,将此选项设置为false。
跨域请求和数据类型:
“jsonp”请求不支持
同步操作。注意
同步请求可能会暂时停止
锁定浏览器,禁用任何
请求处于活动状态时的操作
默认情况下,jQuery.post(设置)
不会传递参数async
,因此它假定true
这是一个速记Ajax函数,
这相当于:
jQuery.ajax( settings )
$.ajax({
type: 'POST',
url: url,
data: data,
success: success
dataType: dataType
});