在$ .post函数之外使用$ .post检索的变量

时间:2011-09-15 13:34:41

标签: jquery

我正在寻找从mysql数据库加载一组数据并在jquery编写的日历函数中使用它,但是我在使用$ .post函数之外的检索数据时遇到了麻烦。 现在,我已经对函数中的数据进行了硬编码,这很好用,看起来(简化,我当然需要的不仅仅是提醒数据),如下所示:

onRender: function(date) {      
    var redArray = ['2011815','2011820','2011824','2011825'];       
    alert(redArray);
}

现在我想从我的数据库中检索这些数字,例如:

onRender: function(date) {      
    $.post("../actions/calendar.php", {datetype: "1"}, function(data){
        if(data.length >0) {
            redArray = data;
        }
    },"json");  
    alert(redArray);
}

但是警报没有给出任何内容,或者未定义。我如何使用我从php文件中获得的内容,在$ .post-thing之外?我以后需要变量,我不能留在$ .post函数中!

2 个答案:

答案 0 :(得分:0)

$ .post是异步的

onRender: function(date) {      
    $.post("../actions/calendar.php", {datetype: "1"}, function(data){
        if(data.length >0) {
            redArrayReady(data);
        }
    },"json");  
}

function redArrayIsReady(redArray) {
    // work with array
    redArray.length > 0 === true; // true
}

因此您需要等待从服务器返回数据。

答案 1 :(得分:0)

问题是Ajax回调(POST)是异步的。 POST被激发到服务器,您的代码会立即继续到下一行(警报)。所以它会在响应从服务器返回之前到达那里。

解决此问题的方法是将响应的处理放在回调中。 e.g。

onRender: function(date) {      
    $.post("../actions/calendar.php", {datetype: "1"}, function(data){
        if(data.length >0) {
            redArray = data;
            alert(redArray);
        }
    },"json");  

}