2011-11-09 80 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