JQuery Ajax приводит к неопределенным - PullRequest
1 голос
/ 09 ноября 2011

У меня есть простая функция, которая возвращает только переведенное сообщение с сервера клиенту.Но результат показывает неопределенный, когда я передаю результат в переменную.

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;
    }
  });
}

Результат -> Не определено (плохо)

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 ]

3 голосов
/ 09 ноября 2011

Вы можете передать функцию обратного вызова в функцию 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);
});
2 голосов
/ 09 ноября 2011

Ajax-вызов все еще выполняется, когда ваш код перемещается в строку alert(message), поэтому переменная message не имеет значения.

Вам необходимо передать значение ответа функции в методе success.

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

// outside ajax call
function myFunction(ajaxValue) {
    alert(ajaxValue)
}
0 голосов
/ 09 ноября 2011

Ваш код:

var message = MessageNoResult();

устанавливает для переменной message значение, возвращаемое функцией MessageNoResult.Поскольку у вас нет возвращаемого значения в этой функции, вы получите undefined в качестве ответа.

Корректный способ справиться с этим - обработать возвращаемое значение из вызова Ajax внутри обратного вызова success.

По аналогичному вопросу см. Мой ответ здесь :

0 голосов
/ 09 ноября 2011

Вы пытаетесь вернуться с успеха, который является функцией обратного вызова. Установите глобальную переменную и используйте ее в функции успеха retmess = msg.d, чтобы сохранить возвращаемое значение или установить содержимое html-элемента jQuery('#status').html(msg);

0 голосов
/ 09 ноября 2011

Ajax-вызов - это асинхронный вызов, и вы запускаете оповещение сразу после MessageNoResult, поэтому сообщение не имеет значения до тех пор, пока вы фактически не завершите ajax-запрос.

Вам необходимо запустить оповещение при успешном завершении вызова ajax.

...