2011-01-11 40 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掛,所以真正的答案是什麼其他的建議,而不是返回一個值,你的方法應該是將被傳遞的「返回值」時,你的異步方法返回一個回調。