为什么我的AJAX请求会根据文件扩展名给出错误?

时间:2012-10-22 03:17:35

标签: javascript jquery ajax apache file-extension

我有一些JavaScript使用jQuery加载数据快速 $。get(url,function(response){/ * ... * /}}; 数据是直的然后由该响应函数中的JavaScript处理的文本文件。

这对我很有用,但我刚刚在我的机器上遇到了这个问题:使用相同的代码,我现在得到一个错误说:

  

XML解析错误:格式不正确的位置:   moz-nullprincipal:{74091275-3d54-4959-9613-5005459421ce}行号   1,第16栏:image:tiles.png;   --------------- ^

如果我从另一台服务器加载它,它可以正常工作。只有当我在自己的PC上托管它时才会出现这个错误(请注意,它之前在我自己的PC上运行得很好,运行Ubuntu并使用Apache服务页面)。经过多次轰炸后,我发现如果我更改了我正在加载的文件名的扩展名,它可以正常工作。该文件以前名为“test.sprite”,这是我收到错误的时候。如果我将其重命名为“test.txt”,则可以正常加载。

这个错误似乎〜与我系统最近的升级相吻合。我将Ubuntu 10.something升级到12.04。我假设在Apache配置中有一些更新,我没注意到它导致它根据文件的扩展名发送不同的头文件(这里命名的两个是相同的 - .txt实际上只是一个符号链接到.sprite)。

所以我解决了我眼前的问题,但我宁愿不屈服于系统的特性。知道如何在不重命名文件的情况下解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

请注意,我不是阿帕奇专家,但我会指出你正确的方向。

如果未定义,jQuery AJAX函数将假定内容类型是Apache发送回的任何头。您可以通过在Chrome中运行代码,打开开发人员工具(Ctrl + Shift + J)并选择“网络”来简单了解响应的内容。点击相关请求后,您会看到标题返回,包括内容类型。

在您的Apache配置中,可能未定义精灵的内容类型。您可以使用以下行添加它:

AddType 'text/plain; charset=UTF-8' .sprite

这应该在Apache解析的配置文件中 - 取决于您的版本,这可能是apache.conf,httpd.conf或其他文件。

我希望这有助于或至少指出正确的方向。记得在重启Apache之前进行configtest!

答案 1 :(得分:0)

检查响应标头的内容类型,确保从服务器和本地计算机收到的标​​头具有相同的内容类型,即相同的文件类型,相同的编码,如下所示:“content-type :text / html; charset = UTF-8“。