从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)
将其转换为对象。