jQuery .getJSON Firefox 3语法错误未定义

时间:2008-12-02 20:50:14

标签: javascript jquery html json firefox

当我运行此代码时,我在Firefox 3中遇到语法错误(未定义的第1行test.js)。警报正常工作(它显示'工作'),但我不知道为什么我收到语法错误。

jQuery代码:

$.getJSON("json/test.js", function(data) {
    alert(data[0].test);
});

test.js:

[{"test": "work"}]

有什么想法吗?我正在为更大的.js文件工作,但我已经缩小到这个代码。令人抓狂的是,如果我用远程路径替换本地文件,则没有语法错误(这是一个例子):

http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?

10 个答案:

答案 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循环。我认为问题可能是索引超出范围。