Javascript 从AJAX请求获取数组值
我有一个脚本,它读取一个JSON文件,然后用每个元素的name属性填充一个数组 HTMLJavascript 从AJAX请求获取数组值,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我有一个脚本,它读取一个JSON文件,然后用每个元素的name属性填充一个数组 HTML <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script> <script> var a = []; var myMethod = function(){ $.ajax({ url : "numbers.json", dataType : "json",
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
var a = [];
var myMethod = function(){
$.ajax({
url : "numbers.json",
dataType : "json",
success : function(data){
for(i in data){
a.push(data[i].name);
}
}
});
}
myMethod();
console.log(a[2]); // console.log() returns "undefined"
</script>
我无法访问此数组的特定索引。控制台日志始终返回未定义的。我尝试在ajax调用之后添加
。然后(),但是它也不起作用。您正在使用$.ajax
函数运行异步请求,因此您应该等待响应,然后在从服务器端收到响应时调用控制台.log
内部成功回调,否则控制台.log
将不起作用,因为查询处于挂起状态:
success : function(data){
for(i in data){
a.push(data[i].name);
}
console.log(a[2]);
}
希望这有帮助。您的console.log(a[2])
在AJAX
完成处理之前运行,因为AJAX
的异步性质,所以它返回未定义的。将console.log放入AJAX
success中。请参阅工作代码段:
var a=[];
var myMethod=函数(){
$.ajax({
url:“https://api.myjson.com/bins/b4bnr",
数据类型:“json”,
成功:功能(数据){
对于(数据中的i){
a、 push(数据[i].name);
}
console.log(a[2]);
}
});
}
myMethod()代码>
您将需要执行以下操作:
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
var a = [];
var myMethod = function() {
$.ajax({
url: "numbers.json",
dataType: "json",
success: function(data) {
for (i in data) {
a.push(data[i].name);
}
handleData();
}
});
}
function handleData() {
console.log(a[2]);
}
myMethod();
</script>
var a=[];
var myMethod=函数(){
$.ajax({
url:“numbers.json”,
数据类型:“json”,
成功:功能(数据){
对于(数据中的i){
a、 push(数据[i].name);
}
handleData();
}
});
}
函数handleData(){
console.log(a[2]);
}
myMethod();
Javascript不会等待所有代码逐行运行,因此对于异步调用,您需要一个单独的函数来处理数据或处理成功回调中的数据。另一个函数可能会更干净,但这取决于您想对数据执行什么操作。当ajax调用完成时,myMethod函数完成,并移动到下一行,即console.log。只有在返回对numbers.json的请求后,才会执行success。试试这个:
var a = [];
var myMethod = function(){
$.ajax({
url : "numbers.json",
dataType : "json",
success : function(data){
for(i in data){
a.push(data[i].name);
}
console.log(a[2]);
}
});
}
myMethod();
您的console.log在ajax请求完成之前运行。在创建数组的ajax成功函数中签入,您将得到它number.json中有什么?你能在这里发布虚拟数据吗?这样我就可以为你创建一个简单的代码片段。JSON已经给出了。如果你将ajax属性设置为“async:false”,那么你的代码也可以工作。多年来,这个问题已经被问了很多次,我们有一个标准的副本。你为什么不用你的金徽章来标记这是一个复制品?
var a = [];
var myMethod = function(){
$.ajax({
url : "numbers.json",
dataType : "json",
success : function(data){
for(i in data){
a.push(data[i].name);
}
console.log(a[2]);
}
});
}
myMethod();