我有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
答案 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