当我运行此代码时,我在Firefox 3中遇到语法错误(未定义的第1行test.js)。警报正常工作(它显示'工作'),但我不知道为什么我收到语法错误。
jQuery代码:
$.getJSON("json/test.js", function(data) {
alert(data[0].test);
});
test.js:
[{"test": "work"}]
有什么想法吗?我正在为更大的.js文件工作,但我已经缩小到这个代码。令人抓狂的是,如果我用远程路径替换本地文件,则没有语法错误(这是一个例子):
答案 0 :(得分:23)
我找到了解决这个错误的解决方案
$.ajaxSetup({'beforeSend': function(xhr){
if (xhr.overrideMimeType)
xhr.overrideMimeType("text/plain");
}
});
现在解释: 在firefox 3(我只使用firefox THREE)中,每个具有mime类型“text / xml”的文件都会被解析并进行语法检查。如果你用“[”启动你的JSON,它会引发一个语法错误,如果它以“{”开头是“格式错误”(我的翻译为“nicht wohlgeformt”)。 如果我从本地脚本访问我的json文件 - 这个进程中没有包含任何服务器 - 我必须覆盖mime类型...也许你为那个文件设置你的MIME类型错误...
然而,添加这一小段代码将使您免于错误消息
编辑:在jquery 1.5.1或更高版本中,您可以使用mimeType选项来实现相同的效果。要将其设置为所有请求的默认值,请使用
$.ajaxSetup({ mimeType: "text/plain" });
您也可以直接使用$ .ajax,即您的调用转换为
$.ajax({
url: "json/test.js",
dataType: "json",
mimeType: "textPlain",
success: function(data){
alert(data[0].test);
} });
答案 1 :(得分:2)
getJSON可能至少坚持一个名称:值对。
直接数组["item0","item1","Item2"]
是有效的JSON,但在getJSON的回调函数中没有引用它。
在这一小段邮政编码中:
{"result":[["43001","ALEXANDRIA"],["43002","AMLIN"],["43003","ASHLEY"],["43004","BLACKLICK"],["43005","BLADENSBURG"],["43006","BRINKHAVEN"]]}
...直到我添加了{“result”:标签,我才被卡住了。之后我可以参考一下:
<script>
$.getJSON("temp_test_json.php","",
function(data) {
$.each(data.result, function(i, item) {
alert(item[0]+ " " + i);
if (i > 4 ) return false;
});
});
</script>
...我还发现使用$ .each()更容易。
答案 2 :(得分:1)
这可能听起来真的很愚蠢,但是将test.js的文件扩展名从.js更改为.txt。除了.txt(例如:.json,.i18n)之外,我对完全有效的JSON数据文件也有同样的事情。由于我已经更改了扩展名,因此我可以获得数据并使用它。
就像我说的那样,它可能听起来很愚蠢但它对我有用。
答案 3 :(得分:1)
HI
我在本地PC上测试网页时遇到同样的错误,但是一旦它在托管服务器上运行,就不再出现错误。对不起 - 我不知道原因,但认为这可能有助于其他人追查原因
答案 4 :(得分:0)
尝试将“test.js”重命名为“test.json”,这是Wikipedia所说的JSON文件的官方扩展名。也许它在某些时候被作为Javascript处理。
答案 5 :(得分:0)
您是否尝试过禁用所有Firefox扩展程序?
我经常在Firebug控制台中出现一些由扩展引起的错误,而不是由访问过的网站引起的错误。
答案 6 :(得分:0)
检查;
末尾是否有test.js
。 jQuery执行eval("(" + data + ")")
,分号会阻止Firefox找到右括号。可能还有一些其他看不见的角色阻止它这样做。
我可以告诉你为什么这个远程位置工作,这是因为它以完全不同的方式执行。由于它有jsoncallback=?
作为查询参数的一部分,因此jQuery将其视为JSONP,并实际将其插入到<script>
标记内的DOM中。尝试使用"json/test.js?callback=?"
作为目标,它也可能会有所帮助。
答案 7 :(得分:0)
你在运行什么样的网络服务器?我曾经在IIS上读取JSON文件时遇到问题,因为它没有被定义为有效的MIME类型。
答案 8 :(得分:0)
尝试配置.js文件的内容类型。 Firefox显然希望它是text / plain。您可以像上面的Peter Hoffmann那样做,或者您可以设置内容类型标题服务器端。
这可能意味着服务器端配置更改(如apache的mime.types文件),或者如果json是从脚本提供的,则在脚本中设置content-type标头。
或者至少那似乎让错误消失了。
答案 9 :(得分:0)
我有一个类似的问题,但是循环遍历for循环。我认为问题可能是索引超出范围。