我正在调用一个使用jQuery返回ajax GET请求结果的函数。
如何通过函数将结果返回给被调用者?
function makePrPoContent(s_firstName, s_lastName, s_email){
$.get('/includes/snippets/privacy_policy.jsp', {
firstName: s_firstName,
lastName: s_lastName,
email: s_email
}, function(data){
return data;
});
}
var mainContent = makePrPoContent('Stack', 'Overflow', 'email@fake.com');
console.log(mainContent);
上面没有返回任何内容,可能因为返回是在ajax回调中,所以返回不会返回makePrPoContent。
还试过这个:
function makePrPoContent(s_firstName, s_lastName, s_email){
var returnData = false;
$.get('/includes/snippets/privacy_policy.jsp', {
firstName: s_firstName,
lastName: s_lastName,
email: s_email
}, function(data){
returnData = data;
});
return returnData;
}
这不起作用,因为它在ajax调用完成之前返回,因此returnData仍为false。
我可以验证确实存在通过ajax回调返回的数据。当我在回调中记录数据时,它具有我需要的东西。
如何让它返回我的功能?
提前感谢您的帮助!
答案 0 :(得分:3)
AJAX是异步的,所以你最好这样做,你可以改变这样的功能:
function makePrPoContent(s_firstName, s_lastName, s_email, callback){
$.get('/includes/snippets/privacy_policy.jsp', {
firstName: s_firstName,
lastName: s_lastName,
email: s_email
}, callback);
}
然后当你调用它时,你传递了获取结果的函数,如下所示:
makePrPoContent('Stack', 'Overflow', 'email@fake.com', function(data) {
console.log(data);
});
答案 1 :(得分:1)
如果你真的想要这样做(通常是一个坏主意,但你的选择 - 如果你使用ajax你应该真的使用回调)你必须将ajax-request设置为同步而不是asynchonous(那是aj中的A以及所有这些背后的重要和创新理念。)
如何将其设置为同步行为应该很容易在jquery documentation
中找到答案 2 :(得分:0)
最好将结果传递给另一个要处理的函数。基本上你不能做你提出的建议,因为AJAX是异步的,所以不会等到得到结果。
所以只需从你的回调中调用someotherFunction(数据)。