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调用的返回值。
对于类似的问题,请参阅我的答案: