$.axjax( {
url: 'example.com',
type: 'post',
async: true,
data: { a: 1, b:2 },
success: function( res ){
alert( res ); // Это все можно через callback.
}
} );
Но у jQuery, есть такая особенность. Она это вернуть может.
$.axjax(); Вернет object. там находится и ReadyState и status, и ResponseText. Как она это делает.
Использование promise меня, привело к:
new.Promise( function( reslove, reject ) {
//code
}).then( function(){
//Да сдесь я получу нужное значение, но как его получить Вне, "then"
});
Как можно сказать return в функции test - подожди данные еще не пришли, тебе надо подождать, пока не придут данные не возвращай ничего. Как это сделать???
Алексей П: Там ничего не сказана про это. Я целый день копаю инфу про это, на данный момент остановился на ajaxHandleResponses, ajaxConvert. Там происходят странные, мне не понятные вещи. Там есть такая вещичка, как transport, и из-за нее возникли сложности в понимание структуры, данные убегают, конвертируются, обрабатываются, возвращаются обратно, и я уверен, что-то я еще пропустил. Слишком сложно
Алексей П: я перепробовал реально все, что знал. setTimeout, setInterval, while. Return уже куда только не ставил. Случай с while, вообще не понятен. Он вроде бы может вернуть значение, но если добавить асинхронность. То по моей логике.
function b(){
var a = 0;
setTimeout( function(){
a++;
}, 100 );
while(true){
if( a > 0 ){
return a;
}
}
}
Должно работать, небольшая нагрузка. Как-бы синхронность. Браузер подвисает, но ничего не возвращает. Как это?
Алексей П: единственное что мне кажется jQuery, может его вернуть из-за того, что он туда сюда бегает. И когда возвращается конечный результат, он может его обработать.
Outoverlay: функция не вернёт тебе инкрементированное значение. Т.к. Оно будет присвоено через 100 мс. Поэтому позиция return не играет роли. Попробуй возвращать таймаут из функции и резолви его
Алексей П: как return, не играет никакой роли? Ведь jQuery.ajax() Возвращает значение. Или я как-то Вас не понял. Уж очень интересно стало. Как можно что-то вернуть асинхронно.
Алексей П: как мне кажется это значение возвращает уже совсем другая функция. То есть, когда данные пришли с сервера пришли успешно. Они попали в функцию, а та уже сохранила все значения и вернула. То есть jQuery.ajax() Это вообще не ajax. А так, что-то для возврата значений, когда данные все собраны.
Есть такая вещь - шаблон проектирования. Так вот, очень-очень часто мы используем шаблон - функция обратного вызова, она же - callback. Далее, таймаут работает на основе этого шаблона. Т.е. Функция, которую мы кидаем в таймаут выполнится лишь тогда, когда отработает внутренний механизм таймаута. Т.е. Постановка выполнения этой функции в следующем тике эвентлупа. У xmlHttpRequest механизм работы схожь, только используются другие инструменты. Все завязано на событиях. А аякс у джиквери - обертка, которая поддерживает много плюшек в одной, например : cors
Мне кажется, что вы не совсем понимаете, что хотите получить от вызова этой функции. Если бы я делал асинхронную инкрементацию, то я бы использовал промайс.
jQuery.ajax( {
url: 'example.com/just.php',
type: 'post',
success: function( res ){
result_f( res );
}
} );
result_f function( res ){
//Вот то самое складывание значений.
//А в jQuery, происходит тоже самое, только через transport.
//jQuery.ajax() просто принимает, то что транспортировалось в нее.
alert( res );
}
Алексей П: ахахха, ахахах, ахахах, я сегодня целый день разбирался в jQuery, дошел даже до принципа -- "Разделяй и властвуй". Вы саму суть, моего вопроса по моему не поняли. Зачем Вы привили этот пример. Еще раз повторюсь, jQuery.ajax(). Просто возвращает значения реального ajax запроса другой функции. Вот так вот)
Это секрет. Я, на самом деле, перестаю понимать, что тут происходит? Поэтому отвечу по сабжу. Проблема в том, что ретурн не выполнится. Причина проста - резолв таймера произойдет в следующем цикле евентлупа, значит анонимная функция перестанет существовать (вроде). В любом случае, она уже будет выполнена.
Желаю удачи и великих свершений.