jQuery Ajax导致未定义

我有一个简单的函数,只返回从服务器到客户端的翻译消息。 但是当我将结果传递给var时,结果显示未定义。

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

结果 – >未定义(坏)

 var message = MessageNoResult(); alert(message); 

当我查看标题时,它给了我:

 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" 

为什么我仍然得到一个未定义的结果?

您可以将回调函数传递给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); }); 

当代码移动到alert(message)行时,ajax调用仍在执行,因此message变量没有值。

您需要将响应的值传递给success方法中的函数。

 success: function(msg) { myFunction(msg.d); } // outside ajax call function myFunction(ajaxValue) { alert(ajaxValue) } 

ajax调用是一个异步调用,你正在MessageNoResult之后运行警报,因此在你实际完成ajax请求之前,消息没有任何价值。

您需要在ajax调用的成功中运行警报。

你试图从成功回归,这是一个回调函数。 设置一个全局变量并在成功函数retmess = msg.d使用它来存储返回或设置html元素jQuery('#status').html(msg);的内容jQuery('#status').html(msg); retmess = msg.d jQuery('#status').html(msg);

你的代码:

 var message = MessageNoResult(); 

message变量设置为MessageNoResult函数的返回值。 由于此函数中没有返回值,因此undefined为响应。

处理此问题的方法是处理success回调中Ajax调用的返回值。

对于类似的问题,请参阅我的答案: