Как вернуть значение JQuery AJAX вызова? - PullRequest
0 голосов
/ 21 февраля 2012

Как вернуть значение в функцию, которая вызывает jquery ajax. Я подошел к следующему методу, и я не знаю, является ли он правильным или нет

function a(){
var a=ajaxFunction();
}

$.ajax({
    url: "Handler.ashx",
    cache: false,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        _testId = data.Id;
    }

return _testId

});

но в переменной a значение не определено. Значение _testId не возвращается с помощью вышеуказанного метода. Если это не так, скажите, пожалуйста, правильный подход.

Ответы [ 3 ]

1 голос
/ 21 февраля 2012

Вам нужно будет использовать функцию обратного вызова, так как A в «Ajax» означает «асинхронный».

$.ajax({
    'url': 'Handler.ashx',
    'cache': false,
    'contentType': 'application/json; charset=utf-8',
    'dataType': 'json',
    'success': callback
);

function callback(data) {
  var testID = data.id;
  console.log(testID);
}

Вы также можете использовать анонимную функцию для вставки:

$.ajax({
    'url': 'Handler.ashx',
    'cache': false,
    'contentType': 'application/json; charset=utf-8',
    'dataType': 'json',
    'success': function(data) {
      var testID = data.id;
      console.log(testID);  
    }
);

Весь код, который зависит от результатов Ajax, должен обрабатываться в обратном вызове.

0 голосов
/ 21 февраля 2012

Я бы, наверное, сделал это:

var _testID = false;

function a(){
    ajaxFunction();
    if(_testID)
    {
        //Do what you need here
    }
}

$.ajax({
    url: "Handler.ashx",
    cache: false,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        _testId = data.Id;
    }
});
0 голосов
/ 21 февраля 2012

Поскольку вызов AJAX выполняется асинхронно, оператор return будет выполнен до завершения вызова, поэтому возвращаемое значение всегда не определено.

Вам необходимо изменить логику, чтобы иметь дело с результатомвызова AJAX ТОЛЬКО в обработчике успеха:

$.ajax({
    url: "Handler.ashx",
    cache: false,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        _testId = data.Id;

        // do whatever you need with _testId in here.
        // You can pass it to another function if you require to modularise your logic, eg.
        processResult(data)
    }
});

function processResult(json) {
    // do stuff with your json here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...