169 похожих чатов

Ребят, привет У меня есть функция, которая делает ajax запрос и

результат 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;
}`

Как это вообще грамотно сделать?

13 ответов

9 просмотров

Вы слышали вообще о коллбэках?

вы НЕ можете вернуть из функции результат запроса, так как на момент возврата функцией значения запрос ещё даже не отправился

Max-Tymoshyn Автор вопроса
allpeg
вы НЕ можете вернуть из функции результат запроса,...

это я понимаю, но не понимаю как сделать этот самый колбэк, его в результате выполнения делать? Я представляю что можно переменную заранее создать и после выполнения ajax просто ей присвоить значения. Но как это сделать не задавав заранее переменную. Нужно чтобы в коде можно было создать любую переменную и присвоить ей значение которое с ajax пришло

а вообще почитайте книгу специально для Вас: Вы не знаете JS. Асинхронная обработка и оптимизация Симпсон К. (2019) ссылку не даю т.к. в чатах запрещено пиратство, то есть, администрация чатов как правило против того, чтобы публиковать ссылки на телеграм чат "Библиотека программиста" где эту книгу можно скачать, и я Вас отговариваю искать этот чат и скачивать эту книгу, коенчно же её надо купить, я против пиратства.

Max Tymoshyn
это я понимаю, но не понимаю как сделать этот самы...

Нужно чтобы в коде можно было создать любую переменную и присвоить ей значение которое с ajax пришло Так можно НО на момент возврата из функции этой переменной ещё ничего не будет задано.

Max-Tymoshyn Автор вопроса
allpeg
а вообще почитайте книгу специально для Вас: Вы не...

ладно, в теле .done просто следующую функцию использую пока что, хотелось как-то разделить взятие данных и их обработку последующую, мало ли нужно будет в другую функцию эти данные запихнуть -_-

Max Tymoshyn
ладно, в теле .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, но их надо учить

Max-Tymoshyn Автор вопроса
allpeg
У Вас два варианта: 1) делать коллбэк: Вы хотите ч...

теперь got it 🌝👌 приятнее подружится с ES6, но это уже на праздниках можно будет что-то поучить 🤤 где тут плюсики в карму ставить? 😄

Max Tymoshyn
теперь 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 НЕ доступна тут

Max-Tymoshyn Автор вопроса
allpeg
function getFunction(address, callback) { let ...

эх блин, думал по простому отделаться, теперь нужно колбэки по-быстрому понять)) 😄

Max Tymoshyn
эх блин, думал по простому отделаться, теперь нужн...

книгу что я Вам посоветовал купить (и не в коем случае не пиратить по ссылке в лс) как раз объясняет всё это

Max-Tymoshyn Автор вопроса
allpeg
книгу что я Вам посоветовал купить (и не в коем сл...

уже захожу на ЛитРес и не качаю по ссылке в лс :)

Похожие вопросы

Обсуждают сегодня

Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
А чем вам питонисты не угодили?😂
.
79
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
77
А дин типизация это хорошо или плохо?
Alexey
12
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Исходники плюс документация? Вы гоните)) демок хватит всем
zamtmn
11
Карта сайта