从ajax返回数据会导致奇怪的对象

时间:2012-09-30 10:40:52

标签: javascript jquery ajax json

我知道这个问题可能已被问了一千次,但我似乎无法找到答案。我希望result是从ajax-request返回的数据,它应该是一个json数据数组(console.log(data)的结果)。

  var result = $.ajax({
    type: 'GET',
    url: dataPath,
    dataType: 'json',
    success: function(data) {
      console.log(data)
      },
    error: function(){
      //alert("damn");  
      },
    data: {},
    aync: false
  });

  console.log(result); 

但是,console.log(result);将返回一些奇怪的对象,我不知道如何处理。为什么不result = data

5 个答案:

答案 0 :(得分:1)

错字。

改变这个:

aync: false

为:

async: false

ajax方法仍然返回执行请求的jqXHR对象,而不是结果。使用data调用中的success参数并将其存储在某处。

答案 1 :(得分:1)

首先从代码中删除aync: false。它应拼写为async: false,但您不需要它来实现您的目标,它实际上做的是阻止整个浏览器的用户界面,从而导致糟糕的用户体验。请记住,AJAX中的“A”表示异步

$.ajax()来电的结果是承诺,这与您的数据不同,但它仍然可用于获取您的数据。你只需要以某种方式使用它。

尝试更改:

 console.log(result);

为:

result.done(function (data) { 
    console.log(data);
});

或:

result.done(function (data) { 
    console.dir(data);
});

甚至可能会有效 - 未经测试:

result.done(console.dir);

有关更好的解释,请参阅this answer

答案 2 :(得分:0)

result函数内初始化success

 var result;
  $.ajax({
        type: 'GET',
        url: dataPath,
        dataType: 'json',
        success: function(data) {
          result = data;
          console.log(data)
          },
        error: function(){
          //alert("damn");  
          },
        data: {},
        async: false
      });

      console.log(result);

答案 3 :(得分:0)

你提到console.log(result)返回一个奇怪的对象,实际上这个奇怪的对象被称为xhr (XMLHttpRequest)对象。

由于syncronous来电是async: false,因此很容易获得returned data

var result = $.ajax({...}); // get the xhr object in to result
console.log(result.responseText); // xhr object has a "responseText" property

因为result.responseText仅在请求完成后才可用,并且由于console.log(result.responseText);而无法在async:false之前执行此request,因为{ {1}} ajax请求在完成请求之前就会挂起。

syncronous回调success中,由于data但在dataType: 'json'回调之外将成为对象,即success将只是文字以便使用它作为对象,您必须使用console.log(result.responseText);将其转换为对象。

答案 4 :(得分:0)

aync有一个小的拼写错误:false应该读取async:false当然假设您需要同步运行请求,即代码的其余部分等待此结果。

我认为这里的主要问题是您尝试输出到控制台的结果未被ajax请求引用。

您完全可以选择如何引用ajax请求返回的数据,您选择了数据这可能很容易就是结果或json_Data或return_Data或....

因此,为了将ajax请求的结果发送到控制台,我建议:

var result = $.ajax({
    type: 'GET',
    url: dataPath,
    dataType: 'json',
    success: function(result) {
      console.log(result)
      },
    error: function(){
      //alert("damn");  
      },
    data: {},
    async: false
  });