好的,我有这个功能:
function getAreas(){
$.post("/custom_html/weathermap.php",'',
function(data){
return data
}, "json");
}
工作正常。现在我要做的是将数据传递回变量,换句话说:
var data=getAreas()
但它不会返回任何东西。有没有办法让这个工作?
Thanx提前获得任何帮助。
答案 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;
}