jQuery Ajax导致未定义

时间:2011-11-09 09:08:09

标签: jquery ajax undefined webmethod

我有一个简单的函数,它只将已翻译的消息从服务器返回给客户端。但是当我将结果传递给var。

时,结果显示未定义
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;
    }
  });
}

结果 - &gt;未定义(不良)

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"

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

5 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您的代码:

var message = MessageNoResult();

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

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

对于类似的问题,请参阅我的回答here