Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery不会在回调中设置更高范围的对象_Javascript_Jquery_Scope - Fatal编程技术网

Javascript 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");

我有一个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=');
    }
}
问题是它是异步的,因此
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
});