我无法在ajax调用中将我的信息放入数组中,如果我在将数据插入数组后立即提醒信息它可以正常工作,但如果我在最后执行此操作则会发出无法识别的警报。我确保书籍在外面宣布,所以它不会干涉。
var books = [];
$.ajax({
url: 'getFolderContents.php',
dataType: 'json',
success: function (data)
{
for(var i=0;i<data.length;i++) {
var amm = 0;
if(data[i].indexOf(".epub") !== -1) {
//$('#bTable').append("<td><a id = '" + data[i] + "' href = 'book.html'><img src = 'book.png' width = '100px'/><br/>" + data[i] + "</a></td>");
books.push(data[i]);
//alert(books[0]) Works if I call it from here, but not at the end.
}
}
},
error: function()
{
alert("error");
}
});
alert(books[0]);
答案 0 :(得分:3)
您
alert(books[0]);
将在Ajax调用运行时执行,因此在此执行点上不会有任何元素。 Ajax是异步的 - 当您向PHP脚本发出请求时,脚本会继续执行。
将books
函数中的success
所有操作放入。
另一个提示:从jQuery版本1.8开始,您不能再使用参数async: false
来创建同步“A”jax调用。您必须使用回调函数。看看the docs for $.ajax
答案 1 :(得分:3)
您的阵列没有丢失任何数据;数据还没有放在那里。 “A”代表“异步”,这意味着在您调用警报时,您的成功回调尚未运行。
将警报置于回调中:
success: function (data)
{
for(var i=0;i<data.length;i++) {
var amm = 0;
if(data[i].indexOf(".epub") !== -1) {
//$('#bTable').append("<td><a id = '" + data[i] + "' href = 'book.html'><img src = 'book.png' width = '100px'/><br/>" + data[i] + "</a></td>");
books.push(data[i]);
//alert(books[0]) Works if I call it from here, but not at the end.
}
}
alert(books[0]);
},
答案 2 :(得分:1)
在调用成功函数之前,您的警报正在执行。也许使用诺言看到相同的代码会让事情变得更清楚。
$.ajax( url: 'getFolderContents.php', dataType: "json" )
//the then function's first argument is the success handler
.then(function( data ) {
for(var i=0;i<data.length;i++) {
var amm = 0;
if(data[i].indexOf(".epub") !== -1) {
//$('#bTable').append("<td><a id = '" + data[i] + "' href = 'book.html'><img src = 'book.png' width = '100px'/><br/>" + data[i] + "</a></td>");
books.push(data[i]);
//alert(books[0]) Works if I call it from here, but not at the end.
}
alert(books[0]
});
});
我总觉得这种语法让异步的东西更有意义。否则,此代码的功能与Blazemonger的正确答案完全相同。
答案 3 :(得分:0)
您的AJAX调用是异步的,这就是未定义的原因。
答案 4 :(得分:0)
最后的警报发生在ajax成功回调之前,因为ajax是异步的。