Установить переменную из функции с возможной загрузкой ajax? - PullRequest
0 голосов
/ 25 января 2019

Я создал свой собственный скрипт для загрузки контента с помощью AJAX, если он еще не загружен.Вот оно:

/*
 * AJAX Load Content
 */

var loaded_content_urls = {};

function get_content_from_url(url)
{
        if (loaded_content_urls[url] === undefined)
        {
            $.ajax({url: url}).done(function(data)
            {
                loaded_content_urls[url] = data;

                return data;
            });
        }
        else
        {
            return loaded_content_urls[url];
        }
}

И я хочу использовать его следующим образом:

var loaded_html = get_content_from_url($(this).attr('href') + '?ajax');

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

Я выполнил поиск по этой проблеме, но нашел только решения, в которых вы всегда загружаете контент с помощью AJAX.Мой код отличается тем, что сначала проверяет, был ли контент уже загружен.Поэтому я не могу просто использовать функцию AJAX в качестве возврата функции.

1 Ответ

0 голосов
/ 27 января 2019

Попробуйте использовать https://api.jquery.com/deferred.promise/

Ваш пример кода должен выглядеть следующим образом:

var urlData = ''
  function get_content_from_url (url) {
    var _defer = jQuery.Deferred();

    if( urlData === undefined){
      $.ajax({url: url}).done(function(data){
        urlData = data;
          _defer.resolve(urlData);
        });
    } else{
      _defer.resolve(urlData);
    }
    return _defer.promise();
  };

$.when(get_content_from_url(url)).then( function( data) {
  var loaded_html = data;
});

Я также предлагаю использовать метод отклонения и отказа для обработки сценариев ошибок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...