我正在进行AJAX调用以检索一些纯文本:
$.ajax({
url: "programData.txt",
type: "GET",
dataType: "text",
cache: false,
success: processData
});
但是,当我提出请求时,我收到以下错误:
错误:格式不正确 源文件:file:///projects/foo/programData.txt?_ = 1259694590361 行:1,列:2
为什么jQuery会尝试处理我的纯文本以及如何让它停止?
答案 0 :(得分:12)
Firefox试图将该文件解析为HTML,然后再将其移交给jQuery。
有几个理由可以尝试这样做。如果,正如Jaanus建议的那样,您使用的是file://或chrome:// URL,那么它没有MIME类型,并且它采用HTML。或者您的HTTP服务器可能返回错误的MIME类型。
从jQuery 1.5.1开始,有一个mimeType选项可以覆盖Firefox看到的返回MIME类型。所以你可以做到以下几点:
$.ajax({
mimeType: 'text/plain; charset=x-user-defined',
url: "programData.txt",
type: "GET",
dataType: "text",
cache: false,
success: processData
});
doc on mimeType选项位于 http://api.jquery.com/jQuery.ajax/
以下是Firefox级别的一些背景知识: https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Receiving_binary_data
答案 1 :(得分:11)
您是通过HTTP在浏览器中加载页面还是仅将其作为常规文件打开?运行javascript的页面地址是以http:还是file:?开头的?我怀疑它是后者,并且在这种情况下Ajax调用的工作方式不同(参见下面的tvanfonsson的回复)。如果您正在构建将在稍后通过HTTP提供的Web应用程序,请尝试使用本地HTTP服务器运行您的页面。
答案 2 :(得分:3)
通过XMLHttpRequest打开本地文件时,获得的响应代码与使用HTTP请求时的响应代码不同。我怀疑,因为你打开一个本地文件,jQuery会对响应代码感到窒息,认为这是一个错误,因为它不是200 OK
。
示例:非HTTP同步请求
尽管名称如此,但XMLHttpRequest可用于非HTTP请求。此示例显示如何使用它从本地文件系统获取文件。
var req = new XMLHttpRequest();
req.open('GET', 'file:///home/user/file.json', false);
req.send(null);
if(req.status == 0)
dump(req.responseText);
这里要注意的关键是结果状态被比较为0表示成功而不是200.这是因为文件和ftp方案不使用HTTP结果代码
答案 3 :(得分:0)
支持的类型是:
* "xml": Treat the response as an XML document that can be processed via jQuery.
* "html": Treat the response as HTML (plain text); included script tags are evaluated.
* "script": Evaluates the response as JavaScript and evaluates it.
* "json": Evaluates the response as JSON and sends a JavaScript Object to the success callback.
也许使用应该使用“html”而不是“text”,因为如果你指定html作为类型,jQuery似乎不会解析任何东西。
答案 4 :(得分:0)
jQuery在chrome和ie8上似乎没有这个问题。