我已经编写了自己的脚本来加载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函数作为该函数的返回。
答案 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;
});
我还将建议使用拒绝和失败方法来处理错误情况