如何通过函数返回结果?

时间:2010-10-29 16:02:02

标签: javascript jquery ajax return-value

我正在调用一个使用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回调返回的数据。当我在回调中记录数据时,它具有我需要的东西。

如何让它返回我的功能?

提前感谢您的帮助!

3 个答案:

答案 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(数据)。