【问题标题】:Parsing JSON object with $.parseJSON returns null使用 $.parseJSON 解析 JSON 对象返回 null
【发布时间】:2012-11-02 01:09:03
【问题描述】:

我在我的 rails 项目中通过 $.ajax 请求 JSON 响应。

jQuery ->
  testAjax()


testAjax = ->
  $.ajax
    url: "/gmap/test"
    data: "id=2"
    type: "GET"
    dataType: "json"
    complete: (data_response) ->
      result = $.parseJSON(data_response)
      alert(result.name)

我似乎得到了正确的 json 字符串(根据 Firebug 控制台),如下所示:

{"name":"Space Needle","latitude":47.620471,"longitude":-122.349341}

但是,我收到一个错误提示“TypeError: result is null”

如果我使用

alert(data_response.responseText)

complete 函数中,我得到了 json 字符串。所以问题似乎是解析。 (???)

【问题讨论】:

  • 返回肯定是字符串。如果使用 parseJSON 解析已经是 JSON 的内容(设置了正确的标头),则会引发该错误。
  • 您不需要解析 JSON,设置 dataType: "json" 会自动完成,这意味着您正在尝试解析 JavaScript 对象。
  • 输入真实代码,而不是伪代码
  • 这是咖啡脚本而不是伪代码。
  • @Korikulum 完整的回调不包含解析的 json 响应,它的第一个参数是 jqXHR 对象。 :

标签: jquery ajax ruby-on-rails-3 json coffeescript


【解决方案1】:

完整回调的第一个参数是jqXHR 对象。试试这个:

#Scope the result outside of the testAjax function
result = null

testAjax = ->
  $.ajax
    url: "/gmap/test"
    data: "id=2"
    type: "GET"
    dataType: "json"
    success: (data) ->
      #set the data to your result
      result = data
    complete: ->
      alert result.name

随时编辑我的回复,将我的更改转换为有效的咖啡脚本。

【讨论】:

  • @donsteffenski 回复您建议的编辑(被其他审阅者拒绝),是的,这就是我的意图。
  • 如果你要回答这个主题的问题,也许现在是学习coffeescript的好时机,@Kevin? :)
  • @MatthewBlancarte 老实说,我没有看到咖啡脚本存在的理由,但感谢您修复它!
  • 在我开始使用它之前,我也是这么想的。您会惊讶地发现需要编写的代码少了多少以及一些添加的语言功能(默认参数、splats、列表理解等)有多好。也就是说,使用 vanilla js 甚至 TypeScript 可能会更好。 :)
【解决方案2】:

哇!感谢@KevinB,您对successcomplete 的评论已解决。就这么简单,用前者代替后者:

jQuery ->
  testAjax()
  #initialize()


testAjax = ->
  $.ajax
    url: "/gmap/test"
    data: "id=2"
    type: "GET"
    contentType: "application/json"
    dataType: "json"
    success: (data) ->
      alert(data.name)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多