2011-06-06 82 views
3

我试图检索一个JSON对象数据(我已经验证是正确的格式)和输出数据到Firebug控制台。我使用JSONLint(http://jsonlint.com/)验证了JSON,并且知道数据不会返回到JSON对象中,因为当我登录它时,它将记录为文本而不是对象。当我查看ajax文章时,有一个JSON选项卡,它显示了该对象,由于某种原因我无法检索它。转换AJAX数据返回到JSON

我的Ajax调用

$.ajax({ 
     url:'/coords/base', 
     data: { type: obj.type, id: obj.id }, 
     dataType:'text', 
     type:'get', 
     async:false, 
     success: function(data) { 
      console.log(data); 
     } 
    }); 

我返回的数据看起来像这样:

{ 
     "1": {"name":"TEXT","coords":[   
      { "entry":3,"x":15,"y":15 }  
     ]}} 

当我设置的AJAX调用给一个变量,并添加.responseText;到调用结束时,我可以检索AJAX调用的纯文本返回。我认为我可以使用$ .serialize()或$ .parseJSON(),但然后我得到一个错误“未捕获的异常:语法错误,无法识别的表达式。”

的最终目标将是检索该responseText的内容,并使用我的整个文件的JSON对象。这个调用必须同步完成,因为它加载了重要的数据。

任何帮助将不胜感激。

+0

你是如何从服务返回的数据?响应类型是application/json吗? – 2011-06-06 20:50:20

+0

如果您移除转换器块,它有什么区别吗?这:转换器:{“text json”:$ .parseJSON()}。因为dataType:“json”应该这样做 – Fredrik 2011-06-06 20:51:19

+0

为什么要定义自己的转换器?JSON编码已经内置,我认为你提供的转换器是错误的。 – Daff 2011-06-06 20:51:50

回答

3

明确指示jQuery的对待响应为文本:

$.ajax({ 
    // ... 
    dataType: "text", 
    // ... 
}); 

然后,您将能够得到JSON字符串。但是,如果您打算在此后将其转换为JS值,那么让我阻止您:jQuery可以自动为您做到这一点。如果指定了dataType"json",或只是让jQuery的做一个聪明的猜测,该data参数传递给success:功能将解析JSON对象。

+0

我尝试将数据类型切换为文本(我将它设置为json),但仍然收到错误消息。多么令人失望:( – jslamka 2011-06-06 21:07:49

+0

适用于我... http://jsfiddle.net/passcod/TE69H/4/ – 2011-06-06 21:20:49

+0

@FélixSaparelli你的链接对我来说非常有用谢谢 – HaBo 2011-10-18 18:11:53

1

为什么不使用$.getJson()

这是equivilant到

$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: callback 
}); 

,你应该再能做到以下几点:

$.getJSON('file.json', function(data) { 
$.each(data, function(i) { 
     console.log(data[i]); 
    }); 
    }); 

编辑

也许,我误解了这个问题LEM。

编辑#2 也许这个问题会有所帮助: Is there a version of $getJSON that doesn't use a call back?

这表明使用此:

$.ajax({ 
    type: 'GET', 
    url: 'whatever', 
    dataType: 'json', 
    success: function(data) { console.log(data);}, 
    data: {}, 
    async: false 
}); 

这当然,看起来你有什么,所以我觉得我需要退后一步并重新分析问题。

+0

当我指定async:false时,使用getJSON()方法会出错。我试图用这些数据做的事情是将它存储在变量中,以便在成功调用之外使用。重要的是它同步发生,但通过AJAX调用。 – jslamka 2011-06-06 21:06:36