alex_web64

Выполнение функции по окончанию ajax

Рекомендуемые сообщения

Здравствуйте.

У меня есть необходимость сделать две функции, одна для загрузки определенных данных, а вторая для работы с ними. Пример:

var response;

function getSomeStuff () {
	$.get(url, function (data) {
		response = data;
	})
}

function useResponse () {
	// работаем с переменной response
}

getSomeStuff();
useResponse();

Проблема в коде выше - во время запуска функции useResponse get-запрос еще не завершится, соответственно response будет undefined.

Как заставить код выше работать, не помещая вызов функции useResponse внутрь функции success?

Изменено пользователем alex_web64

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Очевидно, поместить вызов функции после получения результата.

sorry, не внимательно прочитал вопрос :-)

Не помещая — никак. Запрос выполняется асинхронно, основной же код в любом случае выполнится раньше, чем запрос будет обработан. Поэтому только вызывать после получения ответа.

Изменено пользователем Igor Schnaider

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для этого удобно будет использовать промисы. В jq ajax запросы через .get .post .ajax уже thenable - т.е мы можем написать так:

$.get(url)
	.then(useResponse)

function useResponse (response) {
	// работаем с переменной response
    // заметь, что она тут как первый аргумент.
}

Но допустим ты заложил какую-то идею в свой остальной код и мы не можем так делать. Необходимо именно две функции. В таком случае ты можешь использовать нативные промисы или jq-промисы через $.Deferred, давай попробуем:

function getSomeStuff () {
  var q = $.Deferred();
  $.get(root + '/posts/1', q.resolve)
  return q;
}

function useResponse (response) {
	// работаем с переменной response
}

getSomeStuff().then(useResponse);

 

Еще можно воспользоваться async-await :с Можешь поискать что-то сам по теме, потому что придется собирать оное бабелом на клиенте. В случае js на сервере можно будет пустить интерпретатор с ключем --harmony-async-await, но это скорее не твой случай. Вобщем последний абзац просто инфа для общего развития.

 

Изменено пользователем moron
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: cyklop77
      подскажите пожалуйста, что нужно сделать чтобы получить возможность использовать базу городов от КЛАДР? она выложена в общий доступ, но обратиться через ajax к ней невозможно потому что браузеры не разрешают кроссдоменные запросы
      когда бэкенд пишешь сам, то сам же и настраиваешь отдающий сервер в соответствии с CORS, но здесь не тот случай. однако, думаю, большинство разработчиков тянут данные из КЛАДР при помощи ajax. и.... я тоже хочу
      пока только придумал установить в хром расширение. но это временная мера - только для этапа разработки.
    • Автор: mightybat
      Добрый день.
      Есть форма(опросник), переменных на 200, подскажите как можно ее заполнить на компьютере1, и открыть на компьютере2 уже заполненную?
      Может быть есть человеческий способ, решения данной проблемы? 
      Вижу только вариант 1)сохранить все переменные в mysql 2)на втором компе вытащить из БД 3)воссоздать страницу HTML через echo( куча чекбоксов с oncliсk показывающими дивы, которые замучаюсь переписывать с block на none и наоборот).
    • Автор: Divnenkiy
      Здравствуйте.
      Мучаюсь не первый день с такой проблемой.
      Есть jquery, есть модальная форма, сначала мне нужно выполнить GET запрос на сервер, и в зависимости от того, что сервер ответит решить можно ли открывать форму или нет.
      Если использоваться асинхронный запрос, то понятно, что форма откроется в любом случае. А если использовать синхронный то всё хорошо, но консоль браузера ругается, что я не правильно поступаю и мои методы Deprecated.
      Как сейчас правильно поступать в современных тенденциях?
      Для понимания что я хочу, изображу это примерно так:
      function getAccess(){
        ... запрос GET на сервер
      return ответ
      }
      function showModalWindow(){
      если getAccess() то открываем форму
      }
      Не представляю как это вырулить асинхронно

Карта разработчиков

Карта участников

Отметь себя на карте для поиска или предложения работы