我需要将行作为全局数组,但是当我使用console.log来比较函数内部和函数外部的值时,内部的一个工作正常,但外部的一个仍然是空的。我在这里错过了什么吗?
var lines = new Array();
$.ajax({
type: "GET",
url: "posts_replied_to.txt",
success: function(content) {
console.log("success");
lines = content.split('\n');
console.log(lines);
},
error: function() {
console.log("error");
}
});
console.log(lines);
答案 0 :(得分:2)
这里的问题不是关于全局变量。它是异步性问题。在调用ajax请求之外的console.log()时,不会调用 ajax成功回调。这就是为什么你不能获得正确的值。< / p>
^(?:(?:[Ff][gG]|0[146]|[Kk][Ll][Mm])(?=.{10}$)|(?:05|[pP][Tt])(?=.{11}$))[0-9]*(?:[Ff][rR])?$
^^^^^^^^^^^^
使用此代码 Async获得预期结果。
答案 1 :(得分:0)
是的,AJAX是异步函数。因此,在'console.log(lines)'命令之外,在AJAX之前运行。
您可以使用AJAX asyn:false
答案 2 :(得分:0)
在您的GET响应之前,您的第二个console.log代码也会执行,因为ajax不是异步的。改变如下,
var lines = new Array();
$.ajax({
type: "GET",
url: "posts_replied_to.txt",
async: false,
success: function(content) {
console.log("success");
lines = content.split('\n');
console.log(lines);
},
error: function() {
console.log("error");
}
});
console.log(lines);
答案 3 :(得分:0)
尝试使用ajax调用返回的promise对象。
var lines = new Array();
var promise_obj = $.ajax({
type: "GET",
url: "posts_replied_to.txt"
}).promise();
promise_obj.done(function(response)
{
lines = response.split('\n');
console.log(lines);
// Rest of your logic goes here where you want to use lines.
});