alex_web64

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

3 сообщения в этой теме

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

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

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
1 пользователю понравилось это

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


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

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

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

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

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


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

Войти

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


Войти сейчас

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

    • Автор: Endorphin
      Ребята есть вот такая форма, помогите написать для нее форму отправки без перезагрузки страницы, или дайте ресурс хороший почитать про это
       
    • Автор: wildil
      Доброго времени суток!
      Реализую методом ajax, загрузку записей категорий.
      Столкнулся с проблемой шорткодов. В записи выводятся фотографии компонентом media grid от визуала.
      при обработке ajax на странице выводится просто шорткод, к тому же с замененныем кавычками:
      [vc_row][vc_column][vc_media_grid element_width=»3″ gap=»35″ grid_id=»vc_gid:1477958173551-25426be9-2e19-10″ include=»2004,2013,2012,2011,2008,2007,2006,2005,2003,2002,2001,2000″][/vc_column][/vc_row]

      пробовал на вывод ставить просто 
       
      do_shortcode('[vc_media_grid element_width="3" gap="35" grid_id="vc_gid:1477958173551-25426be9-2e19-10" include="2004,2013,2012,2011,2008,2007,2006,2005,2003,2002,2001,2000"]');

      Так же не проходит обработка. Есть предположение что раз фото подгружаются так же ajax и из за этого собственно проблемы.
      Со стандартной WP галерей проблем нету. Шорткод проходит!

      Может кто сталкивался, прошу помощи коллеги!)
      Спасибо!
      Активен
    • Автор: WhatIsHTML
      Привет всем. Помогите, пожалуйста, разобраться.
      Задача следующая : после того, как пользователь заполнит и нажмет на кнопку отправки формы, должно появится модальное окно с текстом "Спасибо" и форма отправится на почту. Искал в сети примеры, но ничего так  и не заработало. Последний вариант, на котором остановился, как самый простой.
      Есть форма
      <form id="ajaxform" action="" class="promo__form" name="mail" method="post" ectype="text/plain"> <p> <input placeholder="имя" name="name" class="input" required="required" type="text"> <input placeholder="телефон" name="phone" class="input pull-right" required="required" type="text"> </p><input name="submit" value="узнать подробности" class="custom-button" type="submit"> </form> Здесь взял плагин http://malsup.com/jquery/form/ и подключаю его (в конце страницы, если это имеет значение)
      <script src="js/jquery-2.1.3.min.js"></script> <script src="http://malsup.github.com/jquery.form.js"></script>
      Есть обработчик
       
      <?php header("Location: {$_SERVER['HTTP_REFERER']}"); if($_POST['submit']) { $name = substr(htmlspecialchars(trim($_POST['name'])), 0, 1000); $phone = substr(htmlspecialchars(trim($_POST['phone'])), 0, 1000); $from = substr(htmlspecialchars(trim($_POST['email'])), 0, 1000); $message = substr(htmlspecialchars(trim($_POST['message'])), 0, 1000000); $message .= "\n" ."My phone: ".$phone; $headers = 'From: '.$from . "\r\n"; $headers .= "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type:text/plain;charset=utf-8" . "\r\n"; $to = 'example@email.com';// Your email here mail($to, $name, $message, $headers); } exit; ?> И сам jQuery
      $('#ajaxform').ajaxForm(function() { //$('#modal-thanks').fadeIn(); alert("Thank you for your comment!"); }); Результат работы : после заполнения формы и нажатия на кнопку, всплывает alert с текстом, НО на почту ничего не приходит.
      В чем проблема? Ломаю голову второй день, не могу понять, что не так.