@Deonis всё правильно написал, но поддержка браузерами нативных Promises далека от идеала. Ждём Spartan
Существуют множество полифиллов, в том числе и для JQuery.
function getData(key, id){
var dfd = $.Deferred(),
data = {'key': key, 'id': id, 'action': 'get'};
$.get('http://site.com/gate.php', data)
.done(function (response) {
response = 'foo|bar|baz'; // предположим, что response вернул такую строчку
dfd.resolve(response);
})
.fail(dfd.reject);
return dfd;
}
getData(10, 100).then(function (response) {
alert(response.split('|')[1]);
}, function (error) {
// обработчик ошибок
});
Смотреть результат здесь
Update
Вы можете явно указать, чтобы $.ajax возвращал вам синхронно, но такой подход в корне неверный.
function getData(key, id){
var result;
$.ajax({
url: 'http://site.com/gate.php',
type: 'GET',
async: false,
data: {
key: key,
id: id,
action: 'get'
},
})
.done(function(response){
response = 'foo|bar|baz'; // предположим, что response вернул такую строчку
result = response.split('|')[1];
})
.fail(function(){
// обработчик ошибок
});
return result;
}
alert(getData(10, 100));
Смотреть результат здесь
А return для ajax'а вообще непонятно куда вернёт значение.
– Vladislav Pyatkov Feb 21 '15 at 16:20}
– WinterSilence Feb 21 '15 at 16:48