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

Javascript 从ajax返回数据会导致奇怪的对象,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我知道这个问题可能被问了一千遍,但我似乎找不到答案。我希望result是从ajax请求返回的数据,它应该是json数据数组(console.log(data)的结果) 但是,console.log(结果)将返回一些奇怪的对象,我不知道如何处理。为什么结果=数据?打字错误 更改此项: aync: false 致: 而且ajax方法仍然返回执行请求的jqXHR对象,而不是结果。使用success调用中的data参数,并将其存储在某处。首先从代码中删除aync:false。它的拼写应该是async:

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

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

打字错误

更改此项:

aync: false
致:


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

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

调用
$.ajax()
的结果是一个承诺,它与您的数据不同,但它仍然可以用于访问您的数据。你只需要以某种方式使用它

尝试更改:

 console.log(result);
致:

或:

或者,即使这样也可能有效-未经测试:

result.done(console.dir);

有关更好的解释,请参阅。

初始化
结果
内部
成功
函数

 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);

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

由于调用是
syncronous
的原因是
async:false
,因此很容易获得
返回的数据

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
,在
请求完成之前,因为
syncronous
ajax请求在完成请求之前挂起所有内容


success
回调中,由于
dataType:'json'
而在
success
回调之外,即
console.log(result.responseText),因此
data
将是一个对象
将是唯一的文本,因此要将其用作对象,您必须使用
$.parseJSON(result.responseText)

将其转换为对象。aync:false应该读为async:false,当然,假设您需要同步运行请求,即让代码的其余部分等待此结果

我认为这里的主要问题是,您试图输出到控制台的结果没有被ajax请求引用

如何引用ajax请求返回的数据完全取决于您的选择,您选择了单词data这可能很容易成为result或json_数据或return_数据或

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

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

你得到了什么数据(例如)?您希望得到什么数据(示例)?尝试
console.dir
而不是
concole.log
@dystroy:不是重复的。这是一个异步调用,但OP尝试执行同步调用。@Guffa你说得对。但实际上,唯一可以接受的答案是向OP解释为什么尝试进行同步调用非常糟糕的答案。OP,请注意,
async:false
现在已被弃用。@dystroy:看起来不是这样。。。为什么要投否决票?如果你不解释你认为错误的地方,它就无法改善答案。我没有否决,但我认为这对OP没有什么帮助。
aync:false
是一个打字错误,但是
async:false
通常是一个概念错误。@dystroy:代码确实有问题。方法是否好,那是另一回事。不,结果不是承诺。OP正在尝试执行同步调用,而不是异步调用。@Guffa在同步调用的情况下,该承诺将已解决,但仍然是一个承诺。使用这一承诺在文档中被标记为不推荐使用,但显然情况仍然如此。在这种情况下,阻止整个浏览器不是明智之举。最好使用带有承诺的异步调用。我的建议是永远不要使用同步AJAX(SJAX?)。@Guffa是的,这显然是错误的方法,我们的责任是帮助找到更好的方法。@Guffa我确实应该这样做,顺便说一句,我就是这么做的。:)
result.done(console.dir);
 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);
var result = $.ajax({...}); // get the xhr object in to result
console.log(result.responseText); // xhr object has a "responseText" property
var result = $.ajax({
    type: 'GET',
    url: dataPath,
    dataType: 'json',
    success: function(result) {
      console.log(result)
      },
    error: function(){
      //alert("damn");  
      },
    data: {},
    async: false
  });