Roman
именно поэтому ничего не получается
Дмитрий
Работают
Roman
https://xhr.spec.whatwg.org/#synchronous-flag
Roman
async: true не await
с async: true нужны либо коллбеки, либо await
Ruslan
А как стандартно решается такая задача ? Или это костыли?
Ruslan
Прошу прощения за безграмотность, я больше по беку
Roman
А как стандартно решается такая задача ? Или это костыли?
стандартно весь остальной код заворачивается в коллбек, либо использовать await
Roman
для конкретно твоего случая вот ответ с async: false https://stackoverflow.com/a/50179128/1268907
Дмитрий
function getData(){ $.ajax({ url: '/ajax.php', type: 'POST', dataType: 'json', data: {action: 'get_content'}, }) .done(function(data) { console.log(data); processContent(data); }); }
Roman
да, типа того
Roman
но лучше function getData(callback) { ... ... done(callback) }
Roman
чтоб гвоздями не прибивать
Ruslan
но лучше function getData(callback) { ... ... done(callback) }
Я так понимаю в этом случае вся страница не будет ждать пока выполнится запрос, а сама функция выполнится в фоновом режиме?
Roman
да
Roman
ну обычно ты в начале загрузки какой-то лоадер вешаешь, а в конце его убираешь
Roman
чтоб пользователю показать что что-то происходит
Ruslan
да
А можете носом ткнуть где почитать про реализацию подобных вещей через такой подход?
Дмитрий
function getData(){ $('#content_placer').html('Загрузка…'); $.ajax({ url: '/ajax.php', type: 'POST', dataType: 'json', data: {action: 'get_content'}, }) .done(function(data) { $('#content_placer').html(JSON.stringify(data)); }); }
Дмитрий
Дмитрий
Внутри .done вызывай что хочешь. Оно вызовется сразу после успешной загрузки
Илья
ты так не сделаешь
Дмитрий
Илья
только колбэк функцией
Дмитрий
Стапэ
Дмитрий
В чём проблема передать в глобальную переменную ответ?
Илья
данные не запишутся
Дмитрий
В том только что этот объект может юзаться до загрузки
Дмитрий
Эм... .done(function(data){ window.my_var = data})
Илья
неа
Илья
не сработает
Илья
.done(function(data){ my_func(data) )
Илья
my_func - делаешь все что тебе надо
Илья
но опять же data ты е сохранишь в переменную но работать с ней сможешь
Илья
помоему можно сохранить в localStorage и уже потом брать данные из него
Илья
типа глобал переменной получится
Ruslan
Всем большое спасибо! Разобрался - Вы были правы, из за того что запрос выполнялся уже после загрузки страницы, а элемент отрисовыввался до - в нем данные были не доступны. Я по php шной привычке думал что если строчкой ниже - значит все по очереди)) Извините за ламерство и спасибо большое за помощь!
Ruslan
В итоге вызов функции для элемента сделал в рамках done
Дмитрий
А в чём проблема-то назначить глобальной переменной?
Дмитрий
http://jsfiddle.net/uf9be342/
Илья
в песочнице отрабатывает как ожидается но на практике это не работает, я не изучал причину этого и не смогу тебе отвтить
Дмитрий
Я юзаю это повсеместно, оно работает)
Илья
ну когда я с этим с сталкивался и у меня не работала) обходным решением было использовать localStorage
Дмитрий
Большой массив сначала гружу из localStorage и периодически его обновляю по ajax и обновляю в localStorage. Работает как надо. Главное понимать, когда синхронно, когда нет.
Дмитрий
Скорее всего обращались к объекту до получения...
Дмитрий
Нет причин этому не работать)
Дмитрий
По крайней мере на моём опыте 99.9% проценотов ошибок не работающего кода — вина программиста)
no name
вставлять функцию в функцию плохая практика?
Илья
нет
Igor
Весь джс так работает
Илья
так все работает
no name
да всмысле
no name
скажите сильные стороны
no name
и слабые
Igor
сильные стороны
Igor
слабые стороны
Илья
и слабые стороны )
Roman
слабые стороны - код превращается в простыню, в которой непонятно - что вспомогательное, а что основное
Илья
да всмысле
есть куча гниг где все расписанно, или ты хочешь не самый лучший перезказ тут прочитать ?
Roman
сильные стороны - не заморачиваешься, что куда пихать, все в 1 функции, но я хз так себе аргумент
no name
все используют вложение функции в функцию?
no name
ибо меня тут на работе рассказывают что нельзя, ты шо
no name
хотя сами наверное не догадываются про то что используют var и это может немножко по другому работать
Илья
блин а как ты вызовишь функцию А из функции Б ? без вложения функций
Roman
это ад колбэков который уже решен
ээ я хз об этом ли мы говорим function something() { const asd = () => { 'something_else' } return () => { asd() } }
no name
ну например есть функция которую подтягивает c#
no name
она в себе содержит несколько функций
no name
которые создают шаблоны строк к примеру
no name
в конце этой главной функции присходит вставка в html документ
Alexander
Здрасьте, я тут JS начинаю изучать, начал использовать nodeJS и увидел, что он не воспринимает document.getElementById() для обращения к странице. Какие вредства для этого можно использовать, или как. Где что почитать?
Илья
смешно) ты используешь то чего в node нет, изучи сначала https://learn.javascript.ru/