2011-11-09 155 views
1

我有一個簡單的函數,它只會將已翻譯的消息從服務器返回給客戶端。但是結果顯示未定義,當我將結果傳遞給var時。jQuery Ajax導致未定義

function MessageNoResult() { 
    $.ajax(
    { 
    type: "POST", 
    async: true, 
    url: '<%= ResolveUrl("~/WebMethods.aspx/MessageNoResult") %>', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     return msg.d; 
    } 
    }); 
} 

結果 - >未定義(壞)

當我看着頁眉它給了我:

Server ASP.NET Development Server/9.0.0.0 
Date Wed, 09 Nov 2011 09:01:31 GMT 
X-AspNet-Version 2.0.50727 
Cache-Control private, max-age=0 
Content-Type application/json; charset=utf-8 
Content-Length 24 
Connection Close 

Response {"d":"No search result"} 
JSON d "No search result" 

爲什麼我仍然得到一個不確定的結果呢?

+0

你正試圖從回調函數返回。其中一種方法是在'success'塊中使用響應來執行你的代碼 –

+0

當你在你內部輸入'console.dir(msg)'時,控制檯說什麼'success:function(msg)'? –

+0

當我將代碼放入成功塊中時,它完美無缺。我試圖讓代碼更加可重用。 – Colin

回答

3

您可以傳遞一個回調函數來MessageNoResult功能

function MessageNoResult(callback) { 
    $.ajax(
    { 
    type: "POST", 
    async: true, 
    url: '<%= ResolveUrl("~/WebMethods.aspx/MessageNoResult") %>', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     callback(msg); 
    } 
    }); 
} 

然後調用:

MessageNoResult(function(msg) { 
    alert(msg.d); 
}); 
0

ajax調用是一個異步調用,並且您在MessageNoResult之後立即運行警報,因此在您實際完成ajax請求之前該消息沒有值。

您需要在ajax調用中成功運行警報。

2

當您的代碼移動到alert(message)行時,ajax調用仍在執行,因此message變量沒有值。

您需要將響應的值傳遞給success方法中的函數。

success: function(msg) { 
    myFunction(msg.d); 
} 

// outside ajax call 
function myFunction(ajaxValue) { 
    alert(ajaxValue) 
} 
+0

沒有辦法專門設置變量,因爲在ajax完全執行之前,仍然會遇到同樣的問題,即流程將繼續。如果你不想將代碼放在'success'方法中,那麼你只有將它傳遞給另一個函數 - 修改示例。 –

+1

用一個回調擴展Rory McCrossan的答案:http://stackoverflow.com/questions/8062574/jquery-ajax-results-in-undefined/8062737#8062737 – andlrc

0

您試圖從成功返回回調函數。設置一個全局變量,並用它成功的功能retmess = msg.d內存儲返回或設置元素的含量jQuery('#status').html(msg);

+1

這會給你一個問題,你不知道什麼時候該值'retmess'被設置,所以你不會知道你可以使用它。 – njr101

0

您的代碼:

var message = MessageNoResult(); 

message變量設置爲MessageNoResult函數的返回值。由於您在此功能中沒有返回值,因此您會收到undefined作爲響應。

corrcet處理此問題的方法是處理來自success回調中的Ajax調用的返回值。

對於類似的問題,看我的答案here