2017-02-21 51 views
0

我试图将ajax结果存储到变量中。当我使用console.log时,它提供了我想要的html标签,但是当我尝试设置为全局变量时,它说未定义。将结果ajax存储到变量不起作用

我怎么能AJAX结果存储到全局变量

var result; 
 
$.ajax({ 
 
    url: "person.html", 
 
    success: function(data){ 
 
    //result=data; 
 
    console.log(data); 
 
    } 
 
}); 
 
//console.log(result);

+0

这是因为'的console.log(结果)'会运行在'result = data'之前 – George

+1

可能存在http:// stackoverflow的重复项。com/questions/23667086 /为什么是我的变量未修改后我修改它在一个函数内异步 –

+0

可能重复[如何从异步调用返回响应?] (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – Maxx

回答

2

Ajax是异步的,这意味着代码,找出哪些结果是在同一时间运行控制台日志的结果,这就是为什么你得到未定义的原因,因为结果尚未设置的时间值被控制台记录。

我知道控制台记录结果的唯一方法是在ajax成功函数中执行它,或者让ajax成功函数调用包含控制台日志的后续函数。这是确保在控制台登录之前返回值的唯一方法。

例子:

例1:

var result; 

$.ajax({ 
    url: "person.html", 
    success: function(data){ 
     result=data; 
     console.log(result); 
     //Note that in this instance using the variable 'result' is redundant, as you could simply console.log data like you're already doing. 
    } 
}); 

例2:

var result; 

$.ajax({ 
    url: "person.html", 
    success: function(data){ 
     result=data; 
     subsequentFunction(result); 
    } 
}); 

function subsequentFunction(result){ 
    console.log(result) 
} 
// Note that if you're doing something simple with result that this could be a bit long winded and unnecessary. 

这一切都取决于你想要多少,结果是做哪种选择会会更好。

注意:还有一个名为'async'的ajax调用的属性,您可以将其设置为false,强制它是同步的,但这通常被认为是一个坏主意,因为它会阻止任何其他代码运行,直到结果返回并锁定浏览器。

1

ajax请求是异步的,因此您的console.log(result)在获得您的请求响应之前正在运行。你应该这样做

var result;

$.ajax({ 
    url: "person.html", 
    success: callback(data) 
}); 

function callback (data){ 
    result=data; 
    console.log(result); 
} 
1

您不会看到任何数据,因为数据尚未填充。在你的具体情况下,你实际上需要等待回应。您可以使用以下代码片段来实现它。

$(document).ready(function(){ 
    var data = $.parseJSON($.ajax({ 
     url: 'person.html', 
     dataType: "json", 
     async: false 
    }).responseText); 
    var myProp = data.property; // Here you can access your data items 
}); 

另一个方法应该是这样的,你可以在一个阵列把你的数据,并可以访问它的另一个功能是这样的:

var result =[]; 

$(document).ready(function() 
{ 
    $.ajax({ 
    url: 'person.html', 
    async:true, 
    dataType: "json", 
    success: function(data) 
    { 
     result.push(data); 
    } 
    }); 
}); 
NewFunction() 
{ 
    console.log(result); 
} 
相关问题