Jquery返回发布数据

时间:2010-08-24 11:49:21

标签: jquery function post return

好的,我有这个功能:

function getAreas(){
      $.post("/custom_html/weathermap.php",'',
            function(data){

                return data

            }, "json");


}

工作正常。现在我要做的是将数据传递回变量,换句话说:

var data=getAreas()

但它不会返回任何东西。有没有办法让这个工作?

Thanx提前获得任何帮助。

4 个答案:

答案 0 :(得分:13)

这是一个异步调用,所以你不能这样回来。

您必须将使用data执行某些操作的代码移动到回调函数(function(data){})中。

function getAreas(){
      $.post("/custom_html/weathermap.php",'',
            function(data){

                //do something with data here, such as calling another function

            }, "json");
}

需要一段时间才能进入异步思维方式,但你会解决这个问题。基本上,一旦发送请求,就会完成发送请求的代码位。执行的线程将完成,您的浏览器将只是坐在那里,没有做任何事情。然后$.post调用将从weathermap.php返回数据,并且将调用您的回调函数。这开始了一个全新的执行线程。尝试将它们视为两个完全独立的执行,一个pre-ajax调用和一个ajax后调用。

这是一些ascii善良:

       V
       |
User clicks button
(or something else happens)
       |
       |
Your JavaScript runs   
       |
       |
And eventually gets
to the ajax call     -------> SERVER ------>     Server sends data back
                                                           |
                                                           |
                                                 And your callback is run
                                                 on the data and execution
                                                 continues from here
                                                           |
                                                           |
                                                           V

答案 1 :(得分:6)

您可以通过将async设置为false来存档

jQuery.loadView = function(url,data){
    var idata;
    $.ajax({
      type: 'POST',
      url: url,
      data: data,
      dataType: 'html',
      async: false,
      success: function(result){idata = result;}
    });
    return idata;
}

答案 2 :(得分:2)

该函数是异步调用的 - 这意味着在您的主getAreas()函数立即返回时,将来某个时刻执行回调部分。在这种情况下,它不返回任何内容,因为您的main函数中没有return语句。

为了实现这一点,您需要在调用getAreas()之前将代码分成需要发生的事情以及之后发生的事情。

然后你最终会得到类似的东西:

function getAreas(){ $.post("/custom_html/weathermap.php",'', onGetAreasComplete, "json");
}

function onGetAreasComplete(data)
{
    // do whatever you need to do with data
}


// do whatever you need to do before getAreas()

getAreas();

希望这是有道理的。

答案 3 :(得分:-3)

试试这个

function getAreas(){
    var ret;
    $.post("/custom_html/weathermap.php",'', function(data){

            ret = data;

        }, "json");

    return ret;
}