jquery返回post数据

Posted

技术标签:

【中文标题】jquery返回post数据【英文标题】:Jquery return post data 【发布时间】:2011-04-03 03:13:36 【问题描述】:

好的,我有这个功能:

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

                return data

            , "json");



效果很好。现在我要做的是将数据传回一个变量,换句话说:

var data=getAreas()

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

感谢任何帮助。

【问题讨论】:

【参考方案1】:

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

您必须将处理 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 调用和一个 post-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

【讨论】:

【参考方案2】:

试试这个

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

            ret = data;

        , "json");

    return ret;

【讨论】:

匿名函数的作用域不是和getAreas的作用域一样吗? edit 显然我错了,对不起:) 匿名函数是回调,只有在getAreas返回后才会调用。 这不是关于同步与异步的范围。【参考方案3】:

该函数是异步调用的——这意味着回调部分会在将来某个时间点执行,而您的主 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();

希望这是有道理的。

【讨论】:

【参考方案4】:

您可以通过将 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;

【讨论】:

以上是关于jquery返回post数据的主要内容,如果未能解决你的问题,请参考以下文章

从 jQuery.post AJAX 调用返回数据?

用jquery的post方法提交数据需要servlet返回的数据类型是json的数据格式,应该怎么做??

怎么样将jquery $.post返回的数据return?

jquery如何返回json数据?

jQuery Ajax Post,将它们添加到数据库,返回数据并再次重复该过程

jQuery框架中$.ajax()的常用参数有哪些?写一个post请求并带有发送数据和返回数据的样例