代码之家  ›  专栏  ›  技术社区  ›  Mechlar

如何通过函数返回post结果?

  •  1
  • Mechlar  · 技术社区  · 15 年前

    我调用的函数使用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 回复  |  直到 15 年前
        1
  •  3
  •   Nick Craver    15 年前

    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
  •  1
  •   oezi    15 年前

    如何让它表现出同步性应该很容易在 jquery documentation

        3
  •  0
  •   Coin_op    15 年前

    最好将结果传递给另一个要处理的函数。基本上,由于AJAX是异步的,因此您不能按照您的建议去做,因此不会等待得到结果。

    所以只要从回调函数内部调用其他函数(数据)。