2016-12-14 2 views
1

Вот функция, которая делает Ajax вызов,Вызов функции после того, как Ajax делается

function gettrans(callback) { 
    var xml = $.ajax({ 
    method: 'GET', 
    url: 'url/?callback=jsonpCallback', 
    dataType: 'jsonp', 
    jsonp: !1, 
    jsonpCallback: "jsonpCallback", 
    data: { drop_lang: dropjslang,}, 
    success: function (data) { 
     callback(); 
    }, 
    error: function (data) { 
    } 
    }); 
    return xml.responseJSON 
} 

Я хочу вернуться xml.responseJSON, но я получаю undefined.

Что может быть решением?

+0

Вы не можете вернуть значение синхронно, если само значение извлекается/производится асинхронно. '$ .ajax' является асинхронным, поэтому' gettrans' не может вернуть значение синхронно. Вы можете вернуть обещание. Или вы можете сделать ajax-вызов upfornt и получить обратный вызов успеха, установить значение/данные, которые вы можете вернуть с помощью gettrans, Добро пожаловать в асинхронное программирование! – bhantol

ответ

1

Вы должны передать функцию обратного вызова в success:

success: function(response) { 
    console.log(response); // response is the data returned by your ajax query 
} 
2

Передайте результат обратного вызова:

function gettrans(callback) { 
    $.ajax({ 
    ... 
    success: function (data) { 
     callback(data); 
    }, 
    ... 
    }); 
}