jQuery不会在回调中设置更高范围的对象

时间:2010-05-19 02:30:00

标签: javascript jquery scope

我有一个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=');
    }
}

2 个答案:

答案 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
});

http://api.jquery.com/jQuery.post/