我的代码中有一个javascript函数,它使用ajax post请求从服务器获取数据。
function fetchData(keyword)
{
$.post(
'http://example.com/apiv5/ajax/',
{
command: 'fetchxxx',
token: 'xxxyyyzzz',
data: keyword
},
function(data)
{
return data;
}
);
}
我需要将数据连接成这样的变量,这里我实际上调用了函数。
var msg = '<p class="question">'+thisGuy.data('description')+'</p>'+fetchData(thisGuy.data('title'));
请注意thisGuy = $(this);
现在的问题是,fetchData()
函数需要几秒钟才能获取并加载数据,但与此同时,javascript跳过此过程并放置一个未定义的&#39;好像是这个函数的返回值。
现在我怎么能告诉他们等到它获取数据然后一旦完成然后连接该变量中的数据?我见过wait()方法,但无法理解如何使用它。
答案 0 :(得分:1)
您应该明白,对于任何异步调用,您都无法从函数返回任何内容。您唯一能做的就是等待请求完成并访问回调中的响应。
由于jQuery.post
方法返回一个从Deferred对象派生的jqXHR对象,因此我们可以使用.done()方法附加成功回调。在这里查看文档https://api.jquery.com/deferred.done/
尝试这样的事情。
function showMsg () {
var thisGuy = $(this);
fetchData(thisGuy.data('title'))
.done(function (data) {
var msg = '<p class="question">'+thisGuy.data('description')+'</p>'+data);
//Now you can use the msg
});
}
function fetchData(keyword)
{
return $.post('http://example.com/apiv5/ajax/',
{
command: 'fetchxxx',
token: 'xxxyyyzzz',
data: keyword
});
}
答案 1 :(得分:0)
将fetchData转换为promise并在Ajax查询的回调中解析它