JavaScript不读取JSON字符串,没有错误

时间:2011-06-24 09:02:19

标签: jquery json

我在这里面临一些奇怪的问题。我刚刚启动:http://claudiu.phpfogapp.com/为了简短起见,当你缩小文件或自定义代码或两者兼而有之时,它会返回一个包含各种数据的JSON字符串:

{
    "source" : MINIFIED_CSS,
    "location" : CSS_URL,
    ...
    "error_msg" : ERROR_MSG
}

在大写字母中输入的单词实际上是值。它适用于几行代码,但会破坏MINIFIED_CSS的大值。奇怪的是,JavaScript也不会发出任何错误。我用这样的jQuery读了JSON:

$.get('/minify/', {custom: $('.custom textarea').val(), files: JSON.stringify(request_string)}, function(data) {

                    console.log(data);
                    var response = eval(data);

当MINIFIED_CSS太大时,我甚至看不到console.log()调用,但是使用Firebug进行检查可以看到源代码,并且还可以看到Firebug中的JSON选项卡,以便很好地解析JSON。

我不知道出了什么问题。我确信JSON字符串不会中断,我甚至创建了一个小的CSS文件,其中包含可能破坏JSON的最笨拙的字符:http://claudiuceia.info/css/small.css但是缩小了它可以顺利运行。以前有人遇到过这个问题吗?什么想法可能是错的?

希望找到问题的实际链接可以帮助您更快地找到解决方案,但如果您还需要其他任何内容请告诉我,我不知道还能尝试什么。另外,请注意,这项工作刚刚停止工作,但几小时前我推出时它有用吗?我在Chrome和Firefox中进行了测试,但是它起作用了,现在它在任何一个都无效。

更新

我遵循了Scottie的建议(下面的评论)并通过JSONlint.com运行响应我遇到问题的请求不在JSONLint中验证,而是通过eval()运行它们不会发出错误并且转换得很好:http://claudiuceia.info/demo/json/index.html

我希望在实时应用中看到,或者至少是错误或者console.log()调用。即使数据为null或未定义或者它可能是什么,也应该显示console.log()调用。

请求正在运行但未被JavaScript读取的图片:

Firebug JSON tab for the request

Firebug response tab for the request

更新2

看起来json_encode()由于某种原因没有正确地转义CSS文本。我必须使用此页面上的解决方案:PHP's json_encode does not escape all JSON control characters

$escapers = array("\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c"); 
$replacements = array("\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b"); 
$result = str_replace($escapers, $replacements, $value); return $result;

3 个答案:

答案 0 :(得分:2)

如果.custom textarea文本太长,您可能会超出最大URI长度错误,从而产生HTTP 416状态代码(您也可以在firebug控制台中看到请求的状态代码,通常它标记为红色所有请求都没有状态200响应。所以你必须使用$ .post而不是$ .get

编辑:基于下面的讨论,问题是为什么没有调用回调函数。 以下是答案

仅在请求成功时才调用回调函数。由于响应包含content-type application / json且浏览器无法解析json(xmlhttp对象包含statusText'parseerror'),因此永远不会执行回调。如果将“text”作为最后一个参数添加到$ .post()以便将响应解析为文本,则将执行回调并记录响应

答案 1 :(得分:0)

也许问题是你使用$ .GET,当CSS(或你传递的其他值)太大时,它会截断它。最大长度约为2000个字符。 尝试使用没有这种限制的$ .POST(好吧,它受php ini中post_max_size的值限制。

请点击此处了解详情:What is the maximum length of a URL in different browsers?

答案 2 :(得分:0)

问题1
您正在使用.get(),它对通过URL发送的字节数有限制。
使用'.post()'而不是..

可能的问题2
您正在使用console.log命令,因此如果您没有打开控制台,那么您的代码会崩溃。


<强>更新

测试你的例子我发现CSS包含\字符,这似乎阻塞了json解析器,它将它作为转义字符处理..

您需要将其转义为\\,以便json解析器正确处理它。

正如您在编辑过的问题中所提到的,有一系列字符需要正确编码..