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

好的,我有这个功能:

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

                return data

            }, "json");


}

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

var data=getAreas()

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

感谢任何帮助。

【问题讨论】:

    标签: jquery function post return


    【解决方案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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-19
          • 2018-06-08
          • 2012-01-08
          相关资源
          最近更新 更多