我正在尝试创建一个分层导航栏,但我遇到了一些问题。
我使用了一系列AJAX post方法将div ID信息发布到PHP页面,然后PHP页面运行循环并检索数据库中的所有类别。
这是通过四个步骤完成的,首先它调用顶级类别1然后调用顶级类别2,然后它运行两个循环3-9和10-50,这些循环应该从数据库中检索多达50个类别,对它们进行排序。
post方法并不总是有效,有时当页面加载时很好,有时它会错过一些<li>
,我希望这是因为有些AJAX需要先加载它才能工作,所以我尝试使用.then和回调对帖子进行排序,这不起作用。
$(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();
});
你可以看到它Here
答案 0 :(得分:0)
您的PHP后端并不总是返回内容,但它始终返回200 HTTP代码。这意味着每次都会调用您的成功回调。你的成功回调假定总是返回内容,这是没有的,因此当它假设&#34;数据&#34;时会抛出错误。是一个数组,并且&#34;切片&#34;可以调用,停止执行它的轨道。简而言之,你真的需要修复你的后端,你还应该在你的php返回的数据的javascript中进行验证,以确保对象,&#34;数据&#34;在这种情况下,你认为它是什么。
您可能还想使用开发控制台,以便自己可以看到所有这些内容。我非常喜欢Firefox中的firebug,但所有主流浏览器都内置了一个。