【问题标题】:How to return post results through function?如何通过函数返回帖子结果?
【发布时间】:2010-10-29 16:02:02
【问题描述】:

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

如何让它返回我的函数?

提前感谢您的帮助!

【问题讨论】:

标签: javascript jquery ajax return-value


【解决方案1】:

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);
});

【讨论】:

    【解决方案2】:

    如果你真的想这样做(通常是个坏主意,但你的选择——如果你使用 ajax,你应该真正使用回调)你必须将 ajax-request 设置为同步而不是异步(这就是ajax 中的 A 以及这一切背后的重要和创新理念)。

    如何将其设置为同步行为应该很容易在jquery documentation 中找到

    【讨论】:

      【解决方案3】:

      最好将结果传递给另一个要处理的函数。基本上你不能做你提议的事情,因为 AJAX 是异步的,因此不会等待得到结果。

      所以只需从回调中调用 someotherFunction(data)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-06
        • 1970-01-01
        • 2012-03-29
        • 2018-02-21
        • 2018-11-17
        • 1970-01-01
        相关资源
        最近更新 更多