【发布时间】:2011-06-13 15:48:21
【问题描述】:
我在解析从 ajax 调用(使用 jQuery 1.4.4)返回的格式正确的 json 时遇到了奇怪的问题。奇怪的是,在我的开发服务器上它工作正常但在线失败。
ajax调用返回的数据如下:
returnData = { "status": true, "data": { "error_return": false, "error_index": -1, "message_display": { "main_message": "hello", "name": "tommy tune the man", "mailed_to": "t@t.com", "subject": "I tried this", "subject_message": "you have a technical question or comment.", "test_me": "you have a technical question or comment." } } };
jsLint 和 jsonLint 都验证这个结构。
当我尝试访问 returnData.data 时发生错误
在“失败”的情况下,我已经从 jQuery.ajax 选项中删除了 dataType,从而允许“最佳猜测”功能。如果我指定 json,jQuery 会抛出一个解析错误,声称 json 无效。我已经尝试了各种各样的东西(包括可怕的 eval() 和 jquery-2json 插件,但没有运气。即使是 jQ 实用程序 jQuery.parseJSON 也失败了。
FF 3.6.13 和最新的 Safari / Chrome 都会出现此问题。
问题1:有人知道为什么最新的jQuery会在这个问题上抛出解析错误吗?
问题2:当我尝试以下时,我成功了:
- var 成功 = returnData.status;
但以下内容未定义:
- var errorReturn = returnData.data.error_return。
奇怪的是,如果我将对象“粘贴”到控制台中,但在脚本中,Firebug 会将其视为一个对象 1) 在 console.dir 中返回“无子对象” 2) BUT 会在console.log 中显示该对象。
非常感谢您的想法
更新: 我发现服务器设置的内容类型不正确。在格式化 JSON 以返回的服务器端 PHP 中(在这种情况下是在 Drupal 6 中创建的(我不得不破解核心可选包括“commons.inc”),我用“应用程序/json”替换了内容类型。这个现在可以工作了。这个问题已经在 Drupal 7 中得到纠正。
【问题讨论】:
-
@T.J.克劳德:谢谢你的回复。
-
使用 jsonviewer.stack.hu 可能有助于更好地了解您的数据。
标签: javascript jquery json jquery-1.4