2012-04-12 56 views
17

Tôi đang cố gắng gửi văn bản trong các cặp khóa giá trị trong khi đang thực hiện một bài đăng ajax contentType: "application/json; charset=utf-8", ajax vào dịch vụ web. Vấn đề tôi phải đối mặt là nếu một trong các tham số (chấp nhận văn bản từ người dùng) có dấu ngoặc kép (") nó phá vỡ mã [thông báo Eror: Đối tượng không hợp lệ được truyền vào]. Cho đến nay tôi đã thử những điều này mà không thành công"Thoát tất cả các ký tự đặc biệt trong một chuỗi được gửi bởi jquery ajax

var text = $("#txtBody").val(); 
var output1 = JSON.stringify(text); 
var output2 = text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); 

Bất kỳ ý tưởng về làm thế nào để thoát khỏi nhân vật đặc biệt cho các bài jquery ajax?

Trả lời

29

Tại sao không sử dụng escape?

escape(text); 

https://developer.mozilla.org/en/DOM/window.escape

EDIT !!!!

Như đã đề cập trong nhận xét, điều này không được chấp nhận.

Phương thức escape() không dùng được tính toán một chuỗi mới trong đó các ký tự nhất định đã được thay thế bằng chuỗi thoát thập lục phân. Sử dụng encodeURI hoặc encodeURIComponent để thay thế.

Thay vì sử dụng một trong các cách sau:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

+0

Cảm ơn bạn Trevor :) – developer747

+1

Tôi đã thêm một câu trả lời, vì nó không phải là phương pháp hay để sử dụng phương pháp thoát – zaynetro

+1

Không được chấp nhận Tính năng này đã bị xóa khỏi Web. Mặc dù một số trình duyệt vẫn có thể hỗ trợ nó, nó đang trong quá trình bị loại bỏ.Không sử dụng nó trong các dự án cũ hoặc mới. Các trang hoặc ứng dụng web sử dụng nó có thể bị hỏng bất cứ lúc nào. – Tester

2

Hiện đã là một chức năng escape(var) giúp bạn thoát khỏi các giá trị. Nó nên là đủ cho mục đích bạn đang nói về

var output2 = escape(text); 
+0

Câu trả lời của bạn đã làm việc cho tôi Starx. Nhưng tiếc là họ không cho phép tôi đánh dấu nhiều hơn một câu trả lời. Xin lỗi: ( – developer747

10

Đối với những người sẽ tìm thấy câu hỏi này: Không sử dụng phương pháp thoát nó đã bị xóa khỏi Web Sử dụng encodeURIComponent() hoặc encodeURI() thay vì
encodeURIComponent()
encodeURI()

+0

Không, không bao giờ sử dụng encodeURI(), nó không đáng tin cậy và dựa trên đoán. encodeURI đoán nơi tên và giá trị dữ liệu bắt đầu và kết thúc dựa trên các ký tự '&' và '=', và đoán đó có thể sai. như một ví dụ trực tiếp, url này được mã hóa không chính xác bởi encodeURI: 'encodeURI (" http://example.org/?foo=i yêu bố mẹ của tôi "); '- ở đây foo được cho là' tôi yêu mẹ và cha của tôi', nhưng encodeURI mã hóa nó thành 'i love my mother' - trong khi đó, encodeURIComponent làm cho 0 dự đoán, và hoạt động chính xác ở đây:' "http://example.org/?foo="+encodeURIComponent("i yêu cha mẹ của tôi"); ' – hanshenrik

2

Tôi đã gặp vấn đề tương tự và giải quyết nó, tôi thay đổi cách tôi thực hiện cuộc gọi ajax.

Tôi có một cái gì đó giống như

var datatosend = "Hello+World"; 

$.ajax({ 
    "type": "POST", 
    "data": "info=" + datatosend 

Và nó gửi về thông tin bài = Hello World, thay thế cho nhân vật + với một không gian trống.

Vì vậy, tôi thay đổi nó thành một chuỗi json đúng

$.ajax({ 
    "type": "POST", 
    "data": {"info":datatosend}, 

và bây giờ nó hoạt động. info = Hello + World

+0

Cảm ơn, autoescaping hoạt động tốt trong trường hợp này. – Trinitron

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