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

我知道这个问题可能已被问了一千次,但我似乎无法找到答案。 我希望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

错字。

改变这个:

 aync: false 

至:

 async: false 

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

首先从代码中删除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); 

请参阅此答案以获得更好的解释。

success函数内初始化result

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

有一个小的拼写错误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 }); 

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

由于async: false因为调用是syncronous ,因此很容易获得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完成之前因为syncronous ajax请求在完成请求之前挂起了所有内容。

在你的success回调data将是一个对象,因为dataType: 'json'但在success回调之外,即console.log(result.responseText); 将只是文本,因此要将其用作对象,您必须使用$.parseJSON(result.responseText)将其转换为对象。