2012-04-11 39 views
13

thể trùng lặp:
jquery - Read a text file?Đọc một tập tin văn bản với jQuery

Tôi muốn đọc một tập tin văn bản của địa phương, sử dụng jQuery. Vì vậy, tôi cố gắng này:

$.get('file_to_read.txt', function(data) { 
    do_something_with(data) 
}); 

Tuy nhiên, jQuery giải thích "file_to_read.txt" như một file html và tôi nhận được một lỗi Javascript bởi vì nó không được định dạng đúng cách và "do_something_with" không có hiệu quả mong muốn của mình, vì dữ liệu là không phải là một chuỗi.

tài liệu jQuery nói rằng tôi cần chỉ định loại dữ liệu. Tuy nhiên, họ chỉ liệt kê html, xml, json và tập lệnh dưới dạng các tệp dữ liệu có thể có; Tôi nên làm gì với một tệp txt thuần túy mà tôi muốn tải trực tiếp vào một chuỗi?

+0

Tại sao bạn không nhận được nó với định dạng HTML và sau đó chuyển đổi nó để chuỗi? –

+0

Có thể dulicate http://stackoverflow.com/questions/1981815/jquery-read-a-text-file – coder

+0

Bạn không thể đọc tệp văn bản "cục bộ" bằng jQuery. jQuery không có quyền truy cập vào hệ thống tập tin phía máy khách. Bạn có nghĩa là "địa phương" như trong, một phần của tên miền của bạn? – meagar

Trả lời

30

Sử dụng 'text' kiểu dữ liệu trong yêu cầu $.get() của bạn.

$.get('file_to_read.txt', function(data) { 
    do_something_with(data) 
}, 'text'); 
// ^------last argument 

Nếu không thì jQuery sẽ đoán được những gì được trả lại.


Remeber, $.get chỉ là một trình bao bọc tiện lợi cho $.ajax. Các kiểu dữ liệu được liệt kê trong $.ajax() docs ...

datatype

Mặc định: Guess thông minh (xml, json, kịch bản, hoặc html)

Các loại dữ liệu mà bạn đang mong đợi trở lại từ máy chủ. Nếu không có quy định cụ thể nào, jQuery sẽ cố gắng suy ra nó dựa trên kiểu MIME của phản hồi (một kiểu MIME XML sẽ sinh ra XML, trong 1,4 JSON sẽ sinh ra một đối tượng JavaScript, trong kịch bản 1.4 sẽ thực thi kịch bản, và bất cứ thứ gì khác sẽ là được trả về dưới dạng chuỗi). Các loại có sẵn (và kết quả được chuyển làm đối số đầu tiên cho cuộc gọi lại thành công của bạn) là:

"xml": Trả về tài liệu XML có thể được xử lý qua jQuery.

"html": Trả về HTML dưới dạng văn bản thuần túy; bao gồm các thẻ tập lệnh được đánh giá khi được chèn vào DOM.

"tập lệnh": Đánh giá phản hồi dưới dạng JavaScript và trả về dưới dạng văn bản thuần túy. Tắt bộ nhớ đệm bằng cách thêm thông số chuỗi truy vấn, "_ = [TIMESTAMP]", vào URL trừ khi tùy chọn bộ nhớ cache được đặt thành true. Lưu ý: Thao tác này sẽ chuyển POST thành GET cho các yêu cầu miền từ xa.

"json": Đánh giá phản hồi dưới dạng JSON và trả về đối tượng JavaScript. Trong jQuery 1.4, dữ liệu JSON được phân tích một cách nghiêm ngặt; bất kỳ JSON không đúng định dạng nào đều bị từ chối và lỗi phân tích cú pháp được ném. (Xem json.org để biết thêm thông tin về định dạng JSON thích hợp.)

"jsonp": Tải trong khối JSON bằng JSONP. Thêm một "? Callback =?" đến cuối URL của bạn để chỉ định cuộc gọi lại. Tắt bộ nhớ đệm bằng cách thêm thông số chuỗi truy vấn, "_ = [TIMESTAMP]", vào URL trừ khi tùy chọn bộ nhớ cache được đặt thành true.

"văn bản": Chuỗi văn bản thuần túy.

nhiều giá trị được phân tách bằng dấu cách: Trong jQuery 1.5, jQuery có thể chuyển đổi một loại dữ liệu từ loại nội dung nhận được trong tiêu đề Loại nội dung thành nội dung bạn yêu cầu. Ví dụ: nếu bạn muốn một phản hồi văn bản được coi là XML, hãy sử dụng "text xml" cho dataType. Bạn cũng có thể tạo một yêu cầu JSONP, yêu cầu nó nhận được dưới dạng văn bản và được jQuery hiểu là XML: "văn bản jsonp xml". Tương tự như vậy, một chuỗi viết tắt như "jsonp xml" trước tiên sẽ cố gắng chuyển đổi từ jsonp thành xml, và thất bại, chuyển đổi từ jsonp thành văn bản và sau đó từ văn bản thành xml.

+0

Cảm ơn. Để tham khảo trong tương lai: làm thế nào tôi có thể biết rằng "văn bản" là một kiểu dữ liệu hợp lệ để vượt qua? Tôi không thấy trong tài liệu jQuery. –

+2

@GadiA: Tôi vừa cập nhật câu trả lời của mình với tài liệu từ '$ .ajax'. Các phương thức như '$ .get' chỉ là một trình bao bọc cho' $ .ajax', vì vậy bạn thường nên tham khảo các tài liệu đó. –

+0

Có thể đọc tệp văn bản từ điều khiển tải lên của tệp 'html' không? –

1

thử datatype "text" (hoặc "html", nó sẽ có tác dụng nếu bạn không có html "kịch bản" thẻ trong nó)

Các vấn đề liên quan