Возвращаемое значение из функции $.ajax()

Как вернуть значение из функции $.ajax?

Это моя основная настройка:

function something(){
 var id = 0;
 $.ajax({
        'url':'/some/url',
        'type':'GET',
        'data':{'some':'data'},
        'success':function(data){
                     id = data['id'];
         }
   });

  return id;
}

Ответ 1

Используйте функцию обратного вызова, это способ JavaScript:

function something(callback){
 $.ajax({
        'url':'/some/url',
        'type':'GET',
        'data':{'some':'data'},
        'success': callback
   });
}

something(function (data) {
    data['id']; // use it here
})

Ответ 2

В дополнение к использованию функции обратного вызова, как указывали другие, другой вариант заключается в том, чтобы изменить его на запрос synchronous:

function something(){
 var id = 0;
 $.ajax({
        'url':'/some/url',
        'type':'GET',
        'async':false,
        'data':{'some':'data'},
        'success':function(data){
                     id = data['id'];
         }
   });

  return id;
}

Имейте в виду, что синхронный вызов является блокирующим вызовом, пока запрос активен.

Ответ 3

Так как AJAX является асинхронным, вы не можете, потому что ваш вызов AJAX не будет немедленно возвращаться. То, что вы можете сделать вместо этого, что обычно делают люди, выполняет функцию обратного вызова, а затем вызывает это с возвращаемым значением. Например:

function something(callback) {
     var id = 0;
     $.ajax({
            'url':'/some/url',
            'type':'GET',
            'data':{'some':'data'},
            'success':function(data){
                 callback(data['id']);
             }
       });
}

something(function(id) {
    alert(id);
});

Обратите внимание, что вы всегда можете сделать свой запрос синхронным, и он будет ждать, пока он будет иметь данные, и вы можете сразу его вернуть, но если ваш запрос занимает более короткого момента, то выполнение всего script и, возможно, страницы, будет остановлен до тех пор, пока он не вернется.