我在var idCategories= new Array();
中声明了一个全局变量file.js
我在这个函数中使用它
function test() {
$.ajax({
type: "GET",
url: "http://my_site/api/categories?ws_key="
+ ws_key
+ "&PHP_AUTH_USER=" + PHP_AUTH_USER,
dataType: "xml",
success: parseXml
});
function parseXml(xml) {
var i = 0;
$(xml).find("category").each(function () {
idCategories[i] = $(this).attr('id');
// length increments at each iteration
alert("length=" + idCategories.length);
i = i + 1;
});
}
alert("length=" + idCategories.length); //returns 0
}
在函数parseXml(xml)
中,数组长度增加很多,但在此函数长度= 0之外!所以我不能在另一个函数中使用数组idCategories
!
答案 0 :(得分:3)
问题是AJAX调用是ASYNC。因此,parseXml
很可能(如果不是总是)在调用警报后调用。
为什么不:
function test() {
$.ajax({
type: "GET",
url: "http://my_site/api/categories?ws_key="
+ ws_key
+ "&PHP_AUTH_USER=" + PHP_AUTH_USER,
dataType: "xml",
success: parseXml
});
function parseXml(xml) {
var i = 0;
$(xml).find("category").each(function () {
idCategories[i] = $(this).attr('id');
// length increments at each iteration
alert("length=" + idCategories.length);
i = i + 1;
});
alert("length=" + idCategories.length); //returns 0
}
}
答案 1 :(得分:1)
尝试使用对象和数组
function parseXml(xml) {var obj={};var a = [];
$(xml).find("category").each(function(i) {
obj["idCategory"]= $(this).attr('id');
a.push(obj);
alert("length="+a.length);// length increments at each iteration
});
}
alert("length="+a.length);//returns 0
}
答案 2 :(得分:1)
$ .ajay默认是asynchronus函数!这意味着当它开始执行时它不会阻止应用程序流。你在$ .ajax成功函数之前执行警报语句。你有两个解决方案。
将asny参数设置为false。
$.ajax({
type: "GET",
async: false,
...
在 parseXml 函数中调用提醒。
我相信你最好的选择是 async:false ,但正确的做法是在 $。ajax 调用完成后推进脚本执行(执行parsexml函数中的下一步。)
答案 3 :(得分:0)
这个问题每天出现多次。您正在进行异步调用,该警报行将在返回Ajax调用之前触发。
答案 4 :(得分:0)
Ajax是异步的。在传递响应之前,会调用alert("length="+idCategories.length);
代码。