2009-02-24 59 views
56

Có cách nào để jQuery lấy thông tin đến và từ một tệp không? Có thể không? Làm sao?Đọc/ghi vào tập tin bằng cách sử dụng jQuery

+2

Bạn có thể không viết câu trả lời cho một lĩnh vực trong HTML? –

+0

Điều đó không còn đúng nữa. nhưng quyền truy cập bạn có thể nhận được thông qua javascript bị hạn chế với những gì người dùng cho phép bạn. – Kiwy

+1

Hộp cát ngăn chặn truy cập tệp trực tiếp vì lý do bảo mật. Bạn có thể sử dụng API tệp HTML5 để cho phép người dùng chọn tệp từ hộp thoại tệp. –

Trả lời

68

Không, JavaScript không có quyền truy cập để ghi tệp vì đây sẽ là một rủi ro bảo mật rất lớn để nói ít nhất. Tuy nhiên, nếu bạn muốn nhận/lưu trữ thông tin phía máy chủ, bạn chắc chắn có thể thực hiện cuộc gọi Ajax tới PHP/ASP/Python/etc. tập lệnh có thể lấy/lưu trữ dữ liệu trong máy chủ. Nếu bạn có nghĩa là lưu trữ dữ liệu trên máy khách, điều này là không thể với JavaScript một mình. Tôi nghi ngờ Flash/Java có thể, nhưng tôi không chắc chắn.

Nếu bạn chỉ đang cố gắng lưu trữ một lượng thông tin nhỏ trong một khoảng thời gian không đáng tin cậy về một người dùng cụ thể, tôi nghĩ bạn muốn Web Storage API hoặc cookie. Tôi không chắc chắn từ câu hỏi của bạn những gì bạn đang cố gắng để thực hiện, mặc dù.

+8

Cookie sẽ hoạt động, tất nhiên, nhưng với hầu hết các trình duyệt hiện đại hỗ trợ lưu trữ cục bộ HTML5, tôi sẽ đi tuyến đó. Dưới đây là hướng dẫn hay về cách hoạt động: http://diveintohtml5.org/storage.html –

+2

@ChrisJaynes - liên kết đó bị hỏng, tôi nghĩ bạn muốn trang này: [http://diveintohtml5.info/storage.html] (http://diveintohtml5.info/storage.html) – rjohnston

+0

@marcgg Tôi nghĩ bạn có thể đã nhầm lẫn Java (do Sun tạo ra) với JavaScript. –

5

Cookie là đặt cược tốt nhất của bạn. Tìm plugin cookie jquery.

Cookie được thiết kế cho loại tình huống này - bạn muốn giữ một số thông tin về khách hàng này ở phía máy khách. Chỉ cần lưu ý rằng cookie được chuyển qua lại trên mọi yêu cầu web để bạn không thể lưu trữ lượng lớn dữ liệu trong đó. Nhưng chỉ cần một câu trả lời đơn giản cho một câu hỏi là tốt.

8

Bạn sẽ cần xử lý quyền truy cập tệp của mình thông qua ngôn ngữ lập trình web, chẳng hạn như PHP hoặc ASP.net.

Để thiết lập, bạn sẽ:

  • Tạo một kịch bản để xử lý việc đọc tập tin và văn bản. Điều này sẽ hiển thị cho trình duyệt.

  • Gửi yêu cầu jQuery ajax đến tập lệnh đó ghi dữ liệu hoặc đọc dữ liệu. Bạn sẽ cần phải chuyển tất cả thông tin đọc/ghi của mình thông qua các tham số yêu cầu. Bạn có thể tìm hiểu thêm về điều này trong tài liệu hướng dẫn jQuery ajax.

Đảm bảo bạn khử trùng bất kỳ dữ liệu nào bạn đang lưu trữ, vì đây có thể là nguy cơ bảo mật. Tuy nhiên, đây thực sự chỉ là lưu trữ dữ liệu tệp phẳng chuẩn và không nhất thiết là bất thường.

Như Paolo đã chỉ ra, không có cách nào để trực tiếp đọc/ghi vào một tệp thông qua jQuery hoặc bất kỳ loại javascript nào khác.

14

cả HTML5 và Google Gears thêm khả năng lưu trữ cục bộ, chủ yếu là do API SQLite được nhúng.

2

Nếu bạn muốn thực hiện điều này mà không cần xử lý phía máy chủ trong trang, có thể là một ý tưởng khả thi để thổi giá trị văn bản vào trường ẩn (sử dụng PHP). Sau đó, bạn có thể sử dụng jQuery để xử lý giá trị trường ẩn.

Bất cứ điều gì nổi thuyền của bạn :)

10

hàm Javascript này trình bày một "Save As" hộp Dialog cho người sử dụng người điều hành chức năng này thông qua trình duyệt của họ. Người dùng nhấn OK và tệp được lưu ở phía máy chủ.

Điều này được sử dụng để làm việc với tất cả các trình duyệt, nhưng hiện chỉ hoạt động với IE. Các mã sau đây là một nguy cơ bảo mật, nếu javascript có thể lưu dữ liệu ở phía máy chủ, một trang web cross scripting hacker có thể sở hữu các máy chủ của bạn. Firefox và Chrome đã cắm lỗ nhưng IE vẫn chưa làm như vậy.

// content is the data (a string) you'll write to file. 
// filename is a string filename to write to on server side. 
// This function uses iFrame as a buffer, it fills it up with your content 
// and prompts the user to save it out. 
function save_content_to_file(content, filename){ 
    var dlg = false; 
    with(document){ 
    ir=createElement('iframe'); 
    ir.id='ifr'; 
    ir.location='about.blank'; 
    ir.style.display='none'; 
    body.appendChild(ir); 
     with(getElementById('ifr').contentWindow.document){ 
      open("text/plain", "replace"); 
      charset = "utf-8"; 
      write(content); 
      close(); 
      document.charset = "utf-8"; 
      dlg = execCommand('SaveAs', false, filename); 
     } 
     body.removeChild(ir); 
    } 
    return dlg; 
} 

Gọi chức năng như thế này:

msg = "I am the president of tautology club."; 
save_content_to_file(msg, "C:\\test"); 
+1

Giải pháp của bạn không hoạt động với tôi trên Firefox 18.0.2 cũng như trên Chrome 24. – Maxbester

+1

Đáng buồn là mã này không còn hoạt động với tất cả các trình duyệt nữa, nó chỉ hoạt động với IE ngay bây giờ. –

+0

Ok cảm ơn bạn đã trả lời. – Maxbester

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