骨干.js JSON解析错误

Posted

技术标签:

【中文标题】骨干.js JSON解析错误【英文标题】:backbone.js JSON parse error 【发布时间】:2013-04-28 11:59:22 【问题描述】:

好的,我是 Backbone.js 的新手,我只是想让一个简单的集合获取工作。

在服务器端,我正在发送以下 JSON,我已验证它在响应正文中出现:

["id":1,"user_id":1,"last_name":"Smith","first_name":"Bob","date_of_birth":"1980-01-06T05:00:00Z","created_at":"2013-04-26T00:50:00Z","updated_at":"2013-04-26T00:50:00Z","id":2,"user_id":1,"last_name":"Smith","first_name":"Roger","date_of_birth":"1985-01-01T05:00:00Z","created_at":"2013-04-27T04:00:00Z","updated_at":"2013-04-27T04:00:00Z"]

这通过了 JSONLint

我的服务器在 Jetty (Scala/Scalatra) 中的 localhost:8080 上运行,而我的客户端内容则由在 localhost:8083 上运行的 nginx 提供服务。我认为我的 CORS 支持工作正常。在任何情况下,我都会收到 200 响应以及我的 JSON。

请求看起来像这样(Opera 开发控制台):

GET /api/persons HTTP/1.1
User-Agent: Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.15
Host: localhost:8080
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate
Referer: http://localhost:8083/
Connection: Keep-Alive
Accept: */*
X-Requested-With: XMLHttpRequest
Origin: http://localhost:8083

响应中的标头是:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://localhost:8083
Access-Control-Allow-Credentials: true
Content-Type: application/json;charset=UTF-8
Server: Jetty(8.1.8.v20121106)

这使我的 fetch 错误回调跳闸。所以,接下来我写了一个常规的 jquery $.getJSON(),然后是 $.ajax 形式的相同请求。没有运气。

我终于在 $.ajaxSetup 中添加了一些检查(哦,coffeescript,顺便说一句):

$.ajaxSetup 
  error: (jqXHR, exception) ->
    if jqXHR.status == 0
      alert('Not connect.\n Verify Network.')
    else if jqXHR.status == 404
      alert('Requested page not found. [404]')
    else if jqXHR.status == 500
      alert('Internal Server Error [500].')
    else if exception == 'parsererror'
      alert('Requested JSON parse failed.')
    else if exception == 'timeout'
      alert('Time out error.')
    else if exception == 'abort'
      alert('Ajax request aborted.')
    else
      alert('Uncaught Error.\n' + jqXHR.responseText)

“解析器错误”正在被触发。所以,嗯。我错过了一些明显的东西,我知道。

【问题讨论】:

我首先检查CORS is activated on jQuery too by using the xhrField.withCredentials setting。 浏览器控制台显示什么?请使用整个堆栈跟踪复制错误。可能会有所帮助。 developers.google.com/chrome-developer-tools/docs/… @SimonBoudrias,谢谢。将 jqXHR.withCredentials = true 添加到我的 $.ajaxPrefilter 修复了它。把它放在一个答案中,这样我就可以接受了:) 好了,我不确定我的回答是否正确,因为缺少一些信息。我很高兴知道没有比这更难的事情了! 【参考方案1】:

您应该确保CORS is activated on jQuery too by using the xhrField.withCredentials setting。

【讨论】:

以上是关于骨干.js JSON解析错误的主要内容,如果未能解决你的问题,请参考以下文章

即使在解码 URL 之后,node.js 中的 JSON 解析错误

JSON.Parse 在 Faker.js 中将字符串解析为 JSOn 时在位置 0 显示错误

ASP.NET MVC前台解析JSON时,类型错误

require.js POST 请求以发现返回“解析 json 错误”的 web api

未找到模块:错误:无法解析 JSON

Jquery Json 解析错误