0

我知道这个问题可能已经被问了一千次了,但我似乎找不到答案。我想result成为ajax-request返回的数据,它应该是一个json-data数组(的结果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

4

5 回答 5

1

错字。

改变这个:

aync: false

至:

async: false

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

于 2012-09-30T10:58:02.147 回答
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);

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

于 2012-09-30T10:59:56.737 回答
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);
于 2012-09-30T11:02:42.953 回答
0

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

由于调用是syncronous因为async: false所以很容易得到returned datalike

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

因为result.responseText只有在请求完成后才可用,并且没有机会在完成之前执行此操作,因为ajaxconsole.log(result.responseText);请求在完成请求之前挂在所有内容上。async:falserequestsyncronous

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

于 2012-09-30T11:15:44.243 回答
0

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

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

如何引用 ajax 请求返回的数据完全是您的选择,您选择了 data 这个词,这很容易是 result 或 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
  });
于 2012-09-30T11:33:45.390 回答