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