2011-01-11 44 views
0
function vote_helper(content_id, thevote){ 
      var result = ""; 
      $.ajax({ 
       type:"POST", 
       url:"/vote", 
       data:{'thevote':thevote, 'content_id':content_id}, 
       beforeSend:function() { 
       }, 
       success:function(html){ 
         result = html; 
       } 
      }); 
      return result; 
     }; 

我想返回结果。但它返回空白字符串。如何返回JQuery中的某些内容?

+0

返回?从函数vote_helper?你不能,POST还没有完成。 – Malvolio 2011-01-11 00:46:28

+7

哦,亲爱的,另一个“我如何从异步功能返回”的问题。 – 2011-01-11 00:48:16

回答

2

简短的回答,你不能。

长答案,.ajax使用回调返回值。这意味着在return触发时可能已经或可能没有返回该值。但无论如何,这是在另一个背景下完成的。

如果您希望使此模拟返回一个值,请在您的函数中添加一个新参数,以取​​代ajax回调。例如:

function vote_helper(content_id, thevote, callback){ 
    var result = ""; 
    $.ajax({ 
     type:"POST", 
     url:"/vote", 
     data:{'thevote':thevote, 'content_id':content_id}, 
     beforeSend:function() { 
     }, 
     success:callback 
    }); 
    return result; 
}; 

vote_helper(x,y,function(html){ 
    result = html; 
}); 

但是无法解决问题,答复将永远不会与调用该函数的代码位于相同的工作路径中。您需要等待回应并从那里获取处理。

1

既然你正在做一个AJAX调用,你需要处理的success回调AJAX调用的结果:

function vote_helper(content_id, thevote){ 
      $.ajax({ 
       type:"POST", 
       url:"/vote", 
       data:{'thevote':thevote, 'content_id':content_id}, 
       beforeSend:function() { 
       }, 
       success:function(html){ 
       /* Do something like call a function with html */ 
       } 
      }); 
     }; 
1

当你的函数结束时,ajax不会完成,所以你不能返回结果。相反,你必须修改你的函数接受一个回调,并呼吁其结果是回调:

function vote_helper(content_id, thevote, callback) { // extra callback argument 
    $.ajax({ 
     type: "POST", 
     url: "/vote", 
     data: {'thevote':thevote, 'content_id':content_id}, 
     beforeSend: function() {}, 
     // Point directly to the callback here 
     success: callback 
    }); 
}; 
0

如果你想在UI是完全没有反应在等待服务器的响应,你可以做到以下几点:

function vote_helper(content_id, thevote){ 
     var result = ""; 
     $.ajax({ 
      type:"POST", 
      async: false, //This line will make your code work 
      url:"/vote", 
      data:{'thevote':thevote, 'content_id':content_id}, 
      beforeSend:function() { 
      }, 
      success:function(html){ 
        result = html; 
      } 
     }); 
     return result; 
}; 

但没有人愿意在UI挂,所以真正的答案是什么其他的建议,而不是返回一个值,你的方法应该是将被传递的“返回值”时,你的异步方法返回一个回调。