Jump to content
  • 0

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


alex_web64
 Share

Question

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

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

var response;

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

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

getSomeStuff();
useResponse();

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

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

Edited by alex_web64
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

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

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

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

Edited by Igor Schnaider
Link to comment
Share on other sites

  • 0

Для этого удобно будет использовать промисы. В 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, но это скорее не твой случай. Вобщем последний абзац просто инфа для общего развития.

 

Edited by moron
  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By РоманФ
      Возникли сложности с созданием нестандартной формы в конструкторе сайтов, может кто-то сталкивался с такими проблемами?
      Как решать такие проблемы в конструкторах по типу Lp Motor и Tilda(есть блок html есть куда вставить css, ну и соответственно есть возможность вставлять скрипты js), что использовать и как отправлять формы на почту в такой ситуации?
       
    • By toplife
      Интернет-маркетинговое агентство Top-Life. Мы ищем в команду Junior Web разработчика.
       
      Что мы ожидаем от кандидата:
      Навыки HTML5, CSS3, JavaScript; Знания PHP5-7‚ MySQL‚ jQuery, ajax; Опыт в верстке; Наличие опыта разработки и знание различных CMS (1С Битрикс, UMI, ModX, WordPress и другие) будет плюсом; Опыт работы и наличие портфолио приветствуется; Умение и желание работать в команде; Аккуратность (осмысленность) в работе.  
      Задачи, которые вам предстоит решать:
      Современная адаптивная кроссбраузерная верстка (HTML5+CSS3); Применение готовой верстки к CMS (1С-Битрикс, Wordpress);  
      Условия:
      Оформление по ТК РФ Заработная плата: от 20 000 до 40 000 руб;  График работы: 5/2 с 10.00–19.00, обед с 14.00–15.00; На территории работодателя; Молодой‚ профессиональный коллектив; Корпоративные мероприятия; Чай, кофе и печеньки с нас; Мы даем возможность не просто работать‚ а создавать и развиваться. Для связи:
      Антон
      тел: 8(981)897-42-46
      mail: a.majstrenko@top-life.su
      hh: https://spb.hh.ru/vacancy/30397980
    • By Olesiy
      Здравствуйте дорогие форумчане! Сделала всплывающую форму обратной связи на своем сайте, все работает,нормально, вот только после отправки письма форма не закрывается, нужно нажимать на крестик для закрытия. Как сделать так , что бы после успешной отправки форма сама закрывалась.Если кому не трудно подскажите ПОЖАЛУЙСТА. P.S в js не буб бум.
      Вот форма:
      <div class="popup"> <div class="popup-dialog">  <div class="popup-content">  <button class="popup-close"> &times;</button> <form  class="top" action="smart.php" method="POST"> <h4>Submit your application</h4> <label for="name"> Your  name<input type="text" name="name" value="" placeholder="name"></label> <label for="emeil"> Your e-meil<input type="text" name="e-meil" value="" placeholder="emeil" required></label> <label for="phone">Your Phone<input type="text" name="phone"  id="phone" value="" placeholder="phone"></label> <textarea name="comment" id="comment-field"  rows="4">comment</textarea> <button class="button-block button-btn" type="submit">  to order</button> </form> </div> </div> </div>  
      Вот скрипт отправки:
      $('form').submit(function(event) { event.preventDefault(); var th = $(this); $.ajax({ type: "POST", url: "smart.php", data:$(this).serialize() }).done(function() { $(this).find("input").val(""); alert("Спасибо за заявку!"); $("form").trigger("reset"); }); return false; }); И на всякий случай скрипт всплытия окна
      $(document).ready(function() { $('.popup-btn').on('click', function (event) { $('.popup').fadeIn();// к тому что нужно показать, fadeIn с анимацией }); $('.popup-close').on('click', function (event) { event.preventDefault(); $('.popup').fadeOut(); }); })  
    • By Лелик
      Очень нужен фильтр товаров на ajax без БД. В интернете нашла подходящий пример. Могу провести всю рутинную работу (коей очень много) по наполнению фильтра. Есть проблемы:
      1. не знаю, как проверить его на ошибки, и
      2. не знаю, как встроить в сайт
      Прошу провести эти две работы. Для заинтересованного программиста пришлю более подробное описание ТЗ
    • By cyklop77
      подскажите пожалуйста, что нужно сделать чтобы получить возможность использовать базу городов от КЛАДР? она выложена в общий доступ, но обратиться через ajax к ней невозможно потому что браузеры не разрешают кроссдоменные запросы
      когда бэкенд пишешь сам, то сам же и настраиваешь отдающий сервер в соответствии с CORS, но здесь не тот случай. однако, думаю, большинство разработчиков тянут данные из КЛАДР при помощи ajax. и.... я тоже хочу
      пока только придумал установить в хром расширение. но это временная мера - только для этапа разработки.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy