如上所述,在我的.each函数之后不会执行任何代码。我想每个函数准备就绪后会执行每个代码吗?!
继承我的js文件:
function onUploadLoad() {
$.ajax({
type: "POST",
url: "headlines_getter.php",
dataType: 'json',
cache: false,
success: function (data1) {
console.log("debug 2");
var i = 0;
var $element = "";
$.each(data1[i].main, function () {
console.log("debug 3 ");
$element += '<div data-role="collapsible"><h3>' + data1[i].main + '</h3>';
var j = 0;
$.each(data1[i].sub, function () {
console.log("debug 4");
$element += '<span><input type="checkbox" name="headlines" data-mini="true" value="blub" /> ' + data1[i].sub[j] + ' </span>';
j++;
});
$element += '</div>';
i++;
var $elements = $($element).appendTo($('#headlinesgroup'));
$elements.collapsible();
});
alert("ok"); // <- this alert is not shown!!
console.log("debug 12"); // <- also not this console.log!
}
});
}
如果我在每个功能之前做一个警报,一切正常吗?!
提前致谢。 最好的问候,约翰。
答案 0 :(得分:1)
您的代码中的这一行:
$.each(data1[i].main, function () {
表示迭代data1[i].main
的属性/元素。也就是说,假设此时i
为0,则期望.main
的{{1}}属性为数组或对象。鉴于您尝试继续在循环中使用data1[0]
并且您自己递增data1[i].main
的方式,我怀疑i
根本不是数组或对象,因此您的.main
都没有{1}}循环正如你所想的那样工作。
在这里猜测,但$.each()
数据的结构实际上是这样的:
data1
该结构与您在[
{ "main" : "some heading 1", "sub" : [ "item1", "item2", "item3" ] },
{ "main" : "some heading 2", "sub" : [ "item1", "item2", "item3" ] },
{ "main" : "some heading 3", "sub" : [ "item1", "item2", "item3" ] }
]
循环中尝试执行的操作相对应,但您在尝试使用$.each()
的同时单独管理自己的$.each()
时出错了{{ 1}}和i
循环计数器。您希望使用j
或传统的$.each()
循环,但就像您尝试同时执行这两项操作一样。假设上面的结构类似于你的结构,你需要做这样的事情:
for
请注意, success: function (data1) {
console.log("debug 2");
var $element = "";
$.each(data1, function (i, currentObj) {
console.log("debug 3 ");
$element += '<div data-role="collapsible"><h3>' + currentObj.main+ '</h3>';
$.each(currentObj.sub, function (j, currentSub) {
console.log("debug 4");
$element += '<span><input type="checkbox" name="headlines" data-mini="true" value="blub" /> ' +currentSub + ' </span>';
});
$element += '</div>';
var $elements = $($element).appendTo($('#headlinesgroup'));
$elements.collapsible();
});
alert("ok");
console.log("debug 12");
}
循环中没有任何地方可以实际使用$.each()
和i
变量,因为jQuery将j
设置为currentObj
并且它还将data1[i]
设置为currentSub
(也是currentObj.sub[j]
)。
答案 1 :(得分:0)
尝试将error
参数添加到$.ajax
请求中,例如:
function onUploadLoad()
{
console.log("debug start");
$.ajax({
type: "POST",
url: "headlines_getter.php",
dataType: 'json',
cache: false,
success: function (data1) {
console.log("debug success");
},
error: function() {
console.log("debug error");
}
});
console.log("debug end");
}
由于问题已经改变......
你能在这里发布你的php的回复吗?要查看你是否正在操纵data1
它必须被操纵的方式......
答案 2 :(得分:0)
如果你去.each()的文档,你会发现回调函数的原型需要两个参数
jQuery.each(集合,回调(indexInArray,valueOfElement))
因此你可以这样做:
$.each(data1[i].main, function (index, element) {
//code inside each
});