результат ajax должен положится в переменную
Я себе представлял это так
let dataset = getFunction(address);
но как я понимаю так не работает потому что getFunction пока делает ajax - еще не определена.
Внутри
`function getFunction(address) {
let res;
let data = {
action: 'bridge',
address: address
}
$.ajax({
url: ajaxurl,
type: 'POST',
data: data,
dataType : 'json'})
.done(function(data) {
res = {
success: true
}
})
.fail(function(xhr, ajaxOptions, thrownError){
res = {
success: false
}
})
return res;
}`
Как это вообще грамотно сделать?
Вы слышали вообще о коллбэках?
вы НЕ можете вернуть из функции результат запроса, так как на момент возврата функцией значения запрос ещё даже не отправился
это я понимаю, но не понимаю как сделать этот самый колбэк, его в результате выполнения делать? Я представляю что можно переменную заранее создать и после выполнения ajax просто ей присвоить значения. Но как это сделать не задавав заранее переменную. Нужно чтобы в коде можно было создать любую переменную и присвоить ей значение которое с ajax пришло
а вообще почитайте книгу специально для Вас: Вы не знаете JS. Асинхронная обработка и оптимизация Симпсон К. (2019) ссылку не даю т.к. в чатах запрещено пиратство, то есть, администрация чатов как правило против того, чтобы публиковать ссылки на телеграм чат "Библиотека программиста" где эту книгу можно скачать, и я Вас отговариваю искать этот чат и скачивать эту книгу, коенчно же её надо купить, я против пиратства.
Нужно чтобы в коде можно было создать любую переменную и присвоить ей значение которое с ajax пришло Так можно НО на момент возврата из функции этой переменной ещё ничего не будет задано.
ладно, в теле .done просто следующую функцию использую пока что, хотелось как-то разделить взятие данных и их обработку последующую, мало ли нужно будет в другую функцию эти данные запихнуть -_-
У Вас два варианта: 1) делать коллбэк: Вы хотите чтобы было так: function getFunction(address) { ... } let foo = getFunction(123); alert(foo); // пример кода потребляющего fooА надо так: function getFunction(address, callback) { ... } getFunction(123,function(foo){ alert(foo); // пример кода потребляющего foo });2) использовать ES6 async/await/promise, но их надо учить
теперь got it 🌝👌 приятнее подружится с ES6, но это уже на праздниках можно будет что-то поучить 🤤 где тут плюсики в карму ставить? 😄
function getFunction(address, callback) { let res; let data = { action: 'bridge', address: address }; $.ajax({ url: ajaxurl, type: 'POST', data: data, dataType: 'json' }) .done(function(otherData) { // должны быть разные имена чтобы не путаться! res = { someData: otherData, success: true }; callback(res); // вызов callback! }) .fail(function(xhr, ajaxOptions, thrownError) { res = { success: false }; callback(res); // вызов callback! }); // без return! }пример потребления: getFunction('что-то',function(myRes){ // myRes доступна тут if(myRes.success){ console.log('ajax-запрос вернул:', myRes.someData); } else { alert('ашипка'); } }); // myRes НЕ доступна тут
эх блин, думал по простому отделаться, теперь нужно колбэки по-быстрому понять)) 😄
книгу что я Вам посоветовал купить (и не в коем случае не пиратить по ссылке в лс) как раз объясняет всё это
уже захожу на ЛитРес и не качаю по ссылке в лс :)
Обсуждают сегодня