jQuery在调用时等待Ajax
我有以下代码:jQuery在调用时等待Ajax,jquery,ajax,variables,wait,Jquery,Ajax,Variables,Wait,我有以下代码: var table = new Array(); function getTableData(year) { if (!table.hasOwnProperty(year)) { $.ajax({ ... success: function(data) { table[year] = data; } }); } } 所以,我想让
var table = new Array();
function getTableData(year) {
if (!table.hasOwnProperty(year)) {
$.ajax({
...
success: function(data) {
table[year] = data;
}
});
}
}
所以,我想让这个函数做的基本上是检查,如果我以前调用过Ajax请求,如果调用过,就不要再调用它,而是返回以前加载的数据
这很有魅力。不起作用的是:
function showTable(year) {
$('#loadingAnimation').show();
$('#tableDiv').ajaxComplete(function() {
// insert data into table
}
$('#loadingAnimation').hide();
}
只要数据在表[year]不存在之前还没有加载,就会执行ajax请求,完成后,将数据插入表中,一切正常。但是当table[year]确实存在时,我的函数就没有什么可等待的了,我得到了一个空白表和加载动画
我以前尝试过的是将ajax请求设置为synchronous,不让我的函数调用ajaxComplete,然后一切都正常,但我根本没有加载动画,在等待期间屏幕只是冻结了
有没有办法让我的剧本发挥作用?
提前感谢:是否有任何理由认为showTable是一个单独的功能?如中所示,在初始加载后使用单独的按钮刷新表数据
否则,最好将加载动画直接添加到工作代码中,如下所示:
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;
}
});
}
您可以通过再设置一个变量来存储上一个表[year]。因此,在所有后续调用中,您都会在执行任何其他操作之前检查它。 例如,类似于-
希望这就是您想要的var table=Array;需要为var table=[];或var table=new Array;。然而,我认为在你的情况下,你想要一个对象,即={}或=新对象谢谢,这是我文章中的一个输入错误。为什么我需要对象而不是数组?它只是一个字符串?…除非年份的值是0..n数组并不是它的最佳选择。some_array[2012]=。。。;将创建0..2011个值未定义的元素。哦,谢谢:>我不知道。@ThiefMaster:您更喜欢使用什么替代方法?是的,我的页面上有箭头按钮,单击该按钮时,将调用showTableyear,并将下一年或上一年作为参数。所以我需要一个单独的函数。
// 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);
},
//...