2009-12-01 38 views
7

我在做一個AJAX調用來檢索一些純文本:爲什麼jQuery堅持我的純文本不是「格式良好」?

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

當我提出請求,不過,我得到以下錯誤:

Error: not well-formed Source File: file:///projects/foo/programData.txt?_=1259694590361 Line: 1, Column: 2

爲什麼jQuery的努力來處理我的純文本,我該如何讓它停止?

+0

有可能是一個內容類型:應用程序/ json頭(或類似)的響應? –

+0

爲了設置正確的內容類型,我在Appache或.htaccess中設置了配置: AddType text/plain .hbs(所有* .hbs都應附帶內容類型文本。)Firefox很高興。 –

回答

11

您是通過HTTP在瀏覽器中加載頁面還是隻是將其作爲普通文件打開?運行JavaScript的頁面的地址是否以http:或file開頭:?我懷疑這是後者,而阿賈克斯的電話在這種情況下的工作方式不同(請參閱下面的tvanfonsson的回覆)。如果您正在構建將在稍後通過HTTP提供的Web應用程序,請嘗試使用本地HTTP服務器運行您的頁面。

+0

確實,我試圖通過'file:// '訪問。轉移到Apache解決了這個問題。 –

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. 

也許使用,因爲jQuery的似乎沒有任何解析應該使用,而不是「文本」「HTML」如果你指定的HTML作爲類型。

+3

http://docs.jquery.com/Ajax/jQuery.ajax#options似乎列出比那更多的dataTypes,雖然我不能說老版本的jQuery –

3

通過XMLHttpRequest打開本地文件時,您獲得的響應代碼不同於使用HTTP請求時的響應代碼。我懷疑,因爲你正在打開一個本地文件,所以jQuery對響應代碼感到窒息,認爲這是一個錯誤,因爲它不是200 OK

Reference

Example: Non-HTTP synchronous request

Despite its name, XMLHttpRequest can be used for non-HTTP requests. This example shows how to use it to fetch a file from the local file system.

var req = new XMLHttpRequest(); 
req.open('GET', 'file:///home/user/file.json', false); 
req.send(null); 
if(req.status == 0) 
    dump(req.responseText); 

The key thing to note here is that the result status is being compared to 0 for success instead of 200. This is because the file and ftp schemes do not use HTTP result codes

+0

jquery正確處理0個案例(至少1.5個)。這種情況下的問題是我認爲的mime類型。 – studgeek

0

jQuery的似乎並沒有對鉻和IE8這個問題。

11

在將文件交給jQuery之前,Firefox正試圖將文件解析爲HTML。

有幾個原因可以試圖做到這一點。如果像Jaanus所建議的那樣使用file://或chrome:// URL,那麼它沒有MIME類型,並且它假定爲HTML。或者你的HTTP服務器可能會返回錯誤的MIME類型。

從jQuery 1.5.1開始,有一個mimeType選項來覆蓋Firefox看到的返回的MIME類型。所以,你可以做到以下幾點:在mime類型選項

$.ajax({ 
    mimeType: 'text/plain; charset=x-user-defined', 
    url:   "programData.txt", 
    type:  "GET", 
    dataType: "text", 
    cache:  false, 
    success:  processData 
}); 

文件是在 http://api.jquery.com/jQuery.ajax/

這裏是什麼在Firefox的水平是怎麼回事一些背景: https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Receiving_binary_data

+0

我已經在Apache下。 如果您嘗試打開一個簡單的txt文件,它會得到「XML語法錯誤」。 但這工作! –

相關問題