jQuery.ajax()报告无效的json - Firebug解析它很好

时间:2010-06-29 18:29:17

标签: ajax drupal jquery

我有jQuery.ajax()创建对url的请求(cms2 / docman / dir /%id)(%id是一个数字无符号整数)。请求的页面运行一些函数并输出一个数组。然后,此数组将运行drupal_json。 drupal_json()回显首先将内容设置为

的内容

Content-Type: text/javascript; charset=utf-8

到目前为止,一切似乎进展顺利。这些函数都在运行,JSON正在按预期输出。通过firebug,它显示收到的响应是JSON并提供“JSON”选项卡来预览它。

但是,jQuerys jQuery.ajax()函数表示发生了解析器错误,并返回“无效”json。我复制了返回的json并将其扔到编辑器(Eclipse PDT)中,但它显示没有错误。

我完全被这一点困扰了。我唯一能想到的是,通过这种方法返回的文本数量是否存在某种限制。

创建请求:

function request(url) {
    $.ajax({
        url: url, 
        type: 'POST',
        dataType: 'json',
        async: false,
        success: function(data) {
            if(data.status) {
                docman.store = data.info;
            }
            else {
                docman.hideMessages();
                docman.error(data.message);
            }
        },
        error: function(data,ts,et) {
            docman.hideMessages();
            docman.error(data);
            docman.store = data.responseText;
        }
    });
}

JSON输出 - http://codetidy.com/102

2 个答案:

答案 0 :(得分:3)

您可以使用http://www.jsonlint.com/检查您的JSON。您会发现它告诉您第136行包含无效代码:

  

语法错误,意外的TINVALID at   第136行解析失败

您需要双重转义字符代码。 (两个反斜杠)。

答案 1 :(得分:1)

你必须做这样的事情

diff --git a/includes/common.inc b/includes/common.inc
index b86f2d2..ff246a3 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -2539,8 +2539,8 @@ function drupal_to_js($var) {
     case 'resource':
     case 'string':
       return '"'. str_replace(array("\r", "\n", "<", ">", "&"),
-                              array('\r', '\n', '\x3c', '\x3e', '\x26'),
-                              addslashes($var)) .'"';
+                              array('\r', '\n', '\u003c', '\u003e', '\u0026'),
+                              str_replace("\'","'", addslashes($var))) .'"';
     case 'array':
       // Arrays in JSON can't be associative. If the array is empty or if it
       // has sequential whole number keys starting with 0, it's not associative