将结果ajax存储到变量不工作中

时间:2017-02-21 10:27:13

标签: javascript html ajax

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

如何将ajax结果存储到全局变量



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




4 个答案:

答案 0 :(得分:2)

Ajax是异步的,这意味着代码可以在结果的控制台日志的同时找出IS运行的结果,这就是为什么你得到了未定义的原因,因为结果还没有在时间设置值正在被控制台记录。

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

示例:

示例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 :(得分:1)

$ .ajax返回一个promise,这意味着你的代码知道它会收到一个响应,但由于它依赖于外部源,它不知道这个响应什么时候会出现。

http://www.htmlgoodies.com/beyond/javascript/making-promises-with-jquery-deferred.html

有关该主题的更多信息,请参见上面的链接。

答案 2 :(得分:1)

ajax请求是异步的,因此在收到您的请求回复之前,您的console.log(result)正在运行。你应该做这样的事情

var result;

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

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

答案 3 :(得分: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); 
}