На данный вопрос уже ответили:
Делаю запрос (В data лежит ключ и все необходимое для запроса):
function sendLanguageRequest() {
let language;
$.getJSON('https://translate.yandex.net/api/v1.5/tr.json/detect', data).done(function (json) { language = json});
return language;
}
Функция возвращает undefined.
Но если присвоение переменной мы заменим выводом результата в консоль то в консоли мы увидим результат.
function sendLanguageRequest() {
$.getJSON('https://translate.yandex.net/api/v1.5/tr.json/detect', data).done(function (json) { console.log(json)});
}
В консоли:
{code: 200, lang: "en"}
Как вывести это результат в переменную чтобы потом вывести через return?
P.S. Я видел подобные вопросы, но так и не нашел в них нормального ответа
Решение которым я пользуюсь выглядит так, но не позволяет выводить через return.
'use strict'
let language;
function sendLanguageRequest() {
$.getJSON('https://translate.yandex.net/api/v1.5/tr.json/detect', data, getLanguage);
function getLanguage(response) {
language = response.lang
}
}
Дело в том, что $.getJSON ... .done выполняется позже нежели выполняется return language и поэтому переменная пустая.
Решение: вместо переменной передать пришедший ответ в функцию setLanguage(language):
function sendLanguageRequest()
{
$.getJSON('https://translate.yandex.net/api/v1.5/tr.json/detect', data)
.done(function (json)
{
if(json.code == 200)
setLanguage(json.lang)
});
}
function setLanguage(language)
{
//здесь делаете присвоение языка чему вам надо
}
Советую вам изучить как работает AJAX.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости