Jquery AJAX帖子不可靠,使用“.then”也不起作用
我试图创建一个分层导航栏,但遇到了一些问题 我使用了一系列AJAX post方法将div ID信息发布到PHP页面,然后该页面运行循环并检索数据库中的所有类别 这是通过四个步骤完成的,首先调用顶级类别1,然后调用顶级类别2,然后运行两个循环3-9和10-50,这些循环应该从数据库中检索最多50个类别并对它们进行排序 post方法并不总是有效的,有时页面加载时会很好,有时会遗漏一些,我想这是因为一些AJAX需要先加载一个,然后才能工作,所以我尝试使用。然后,通过回调来对帖子排序,这不起作用Jquery AJAX帖子不可靠,使用“.then”也不起作用,jquery,ajax,function,deferred,jquery-callback,Jquery,Ajax,Function,Deferred,Jquery Callback,我试图创建一个分层导航栏,但遇到了一些问题 我使用了一系列AJAX post方法将div ID信息发布到PHP页面,然后该页面运行循环并检索数据库中的所有类别 这是通过四个步骤完成的,首先调用顶级类别1,然后调用顶级类别2,然后运行两个循环3-9和10-50,这些循环应该从数据库中检索最多50个类别并对它们进行排序 post方法并不总是有效的,有时页面加载时会很好,有时会遗漏一些,我想这是因为一些AJAX需要先加载一个,然后才能工作,所以我尝试使用。然后,通过回调来对帖子排序,这不起作用 $(d
$(document).ready(function() {
var IDs = [];
$("#menu").find("li").each(function() {
IDs.push(this.id);
});
var arr = $.makeArray(IDs);
var full_list = ""
for (var i = 0; i < arr.length; ++i) {
full_list = full_list + arr[i] + ' '
}
//INDEPENDANT CALL
function A() {
$.ajax({
url: 'DisplayCategories/SubCat.php',
type: 'post',
data: {
'Parent': full_list
},
success: function(data) {
var Element = data.slice(0, 2);
NewData = data.substr(2);
$(Element).after(NewData);
}
}).error(function() {
alert('error');
}).complete(function(data) {
var Element = data.slice(0, 2);
NewData = data.substr(2);
$(Element).after(NewData);
});
}
//INDEPENDANT CALL
function B() {
$.ajax({
url: 'DisplayCategories/SubCatCrafts.php',
type: 'post',
data: {
'Parent': full_list
},
success: function(data) {
var Element = data.slice(0, 2);
NewData = data.substr(2);
$(Element).after(NewData);
}
}).error(function() {
alert('errosr');
}).complete(function(data) {
var Element = data.slice(0, 2);
NewData = data.substr(2);
$(Element).after(NewData);
});
}
function C() {
for (i = 3; i < 10; i++) {
$.ajax({
url: 'DisplayCategories/SubCatLevelThree.php',
type: 'post',
data: {
'Parent': i
},
success: function(data) {
var Element = data.slice(0, 2);
NewData = data.substr(2);
$(Element).after(NewData);
}
}).error(function() {
alert('error');
}).complete(function(data) {
var Element = data.slice(0, 2);
NewData = data.substr(2);
$(Element).after(NewData);
});
}
}
function D() {
for (s = 11; s < 50; s++) {
$.ajax({
url: 'DisplayCategories/SubCatLevelEleven.php',
type: 'post',
data: {
'Parent': s
},
success: function(data) {
var Element = data.slice(0, 3);
NewData = data.substr(3);
$(Element).after(NewData);
}
}).error(function() {
alert('error');
}).complete(function(data) {
var Element = data.slice(0, 3);
NewData = data.substr(3);
$(Element).after(NewData);
});
}
}
B();
A();
C();
D();
});
您可以在现场看到它您的PHP后端并不总是返回内容,但它总是返回200个HTTP代码。这意味着你的成功回电也会在每次都被回电。您的成功回调假定总是返回内容,而没有返回内容,因此当它假定数据是一个数组并且可以调用该切片时,会抛出一个错误,从而停止在其轨道中的执行。简而言之,您确实需要修复后端,并且还应该在javascript中验证php返回的数据,以确保对象(本例中的数据)是您所认为的
您还可能希望使用开发控制台,以便自己能够看到所有这些。我很喜欢Firefox中的firebug,但所有主流浏览器都内置了firebug 抱歉,我对这一点很陌生,我没有对PHP文件进行验证,因为我只是先确保它工作,但是我仍然不明白为什么它有时可以刷新页面,我认为Ajax没有给PHP循环足够的时间来运行,我使用了ob_flush;在PHP循环中返回所有结果,但仍然无法完全工作。您误解了,除了修复PHP之外,还需要在javascript中进行验证。不能对非数组的对象调用数组函数。