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方法提交数据需要servlet返回的数据类型是json的数据格式,应该怎么做??