通过功能设置变量并可能在内部加载ajax?

时间:2019-01-25 04:10:29

标签: javascript jquery html ajax

我已经编写了自己的脚本来加载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 :(得分:0)

尝试使用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;
});

我还将建议使用拒绝和失败方法来处理错误情况