为什么jQuery坚持我的纯文本不是“格式良好”?

时间:2009-12-01 19:12:35

标签: jquery ajax

我正在进行AJAX调用以检索一些纯文本:

$.ajax({
  url:         "programData.txt",
  type:        "GET",
  dataType:    "text",
  cache:       false,
  success:     processData
});

但是,当我提出请求时,我收到以下错误:

  

错误:格式不正确   源文件:file:///projects/foo/programData.txt?_ = 1259694590361   行:1,列:2

为什么jQuery会尝试处理我的纯文本以及如何让它停止?

5 个答案:

答案 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

Reference

  

示例:非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上似乎没有这个问题。