我有以下代码:
var table = new Array();
function getTableData(year) {
if (!table.hasOwnProperty(year)) {
$.ajax({
...
success: function(data) {
table[year] = data;
}
});
}
}因此,我希望该函数所做的基本上是检查,如果我以前调用过Ajax-request,如果调用过,就不再调用它,而是返回之前加载的数据。
这就像一个护身符。不起作用的是:
function showTable(year) {
$('#loadingAnimation').show();
$('#tableDiv').ajaxComplete(function() {
// insert data into table
}
$('#loadingAnimation').hide();
}只要之前没有加载过数据(即tableyear还不存在),就会执行ajax请求,当请求完成时,数据就会插入到表中,一切都会正常工作。但是当tableyear确实存在时,我的函数不需要等待任何东西,我得到一个空表和加载动画。
我之前尝试过将ajax-request设置为同步,并且不让我的函数调用"ajaxComplete",然后一切正常,但我根本得不到加载动画,屏幕只是在等待期间冻结。
有什么想法可以让我的脚本工作吗?提前感谢:)
发布于 2012-06-17 18:49:18
否则,您最好将加载动画直接添加到您的工作代码中,如下所示:
if (!table.hasOwnProperty(year)) {
$('#loadingAnimation').show(); //start querying for data, display the icon
$.ajax({
...
success: function(data) {
$('#loadingAnimation').hide(); //data found, hide icon
table[year] = data;
}
});
}发布于 2012-06-18 13:41:39
您可以尝试再设置一个变量来存储上一个表年份。因此,在所有后续调用中,您将在执行任何其他操作之前对其进行检查。例如。就像这样-
// An example from a dynamic AJAX gallery I had built
var
// ...,
prepareMarkup,
loadResults,
resultsCache = {},
// ...
;
loadResults = function(req, category, tracker) {
// I am calling loadResults on every click (navigation in ur case)
// to load galleries
// thus, tracker is different for each link
if (req && req !== "") {
// I am using a tracker by setting to a link,
// which keeps track of those that users have already clicked
// at least once
if (typeof resultsCache[tracker] === "object"
&& resultsCache[tracker].lookbookResults.length > 0) {
// Load from cache instead
buildLookbook(resultsCache[tracker], category);
return;
}
$.ajax({
type: "GET",
url: "/bin/content/lookbook",
data: "lookbook-feed=" + req + "&siteName=" + APP.Site.siteRoot,
dataType: "json",
success: function(response) {
// Set cache
resultsCache[tracker] = response;
// Go ahead to build UI
buildLookbook(response, category);
},
//...希望这就是你要找的
https://stackoverflow.com/questions/11070284
复制相似问题