2010-01-31 20 views
14

Tôi gặp sự cố khi cố gắng sử dụng biến số đường ray trong mã javascript.Báo giá thoát khỏi Biến Rails khi sử dụng chúng cho Javascript?

Ví dụ, tôi có thể xác định một link_to_remote, với tham số :complete => "alert('my_var');"

Nếu my_var = "I'm testing.", sau đó mã javascript sẽ phá vỡ do báo giá duy nhất đóng mã sớm. Nếu tôi thử sử dụng escape_javascript(my_var) để báo giá được chuyển thành \', có vẻ như không khắc phục được sự cố.

Tôi nhận thấy rằng khi bạn thử alert('I\'m testing'); có vấn đề, nhưng nếu bạn thực hiện alert('I\\'m testing'), nó sẽ hoạt động. Vì escape_javascript chỉ biến thành ' thành \', thay vì \\', ai đó có đề xuất về cách xử lý việc này?

Cảm ơn! Eric

Trả lời

28

khi bạn cố gắng alert('I\'m testing'); có một vấn đề

Dấu gạch chéo ngược cũng là một lối thoát trong chuỗi Ruby! Vì vậy, các chuỗi chữ:

"alert('I\'m testing');" 

nghĩa là chuỗi:

alert('I'm testing'); 

dấu chéo ngược được đi đã trước khi Javascript được một cái nhìn vào nó. Khi bạn đang viết một chuỗi JavaScript theo nghĩa đen bên trong một chuỗi ký tự Ruby, bạn cần phải thoát khỏi lối thoát, \\, để có được \ thực, sau đó, trong JavaScript, hãy thoát khỏi dấu móc lửng.

escape_javascript tạo dấu gạch chéo ngược chính xác cho JavaScript, nếu dấu gạch chéo ngược được đưa vào đầu vào của nó. Nhưng một lần nữa, nếu bạn đang viết một chuỗi chữ, bạn phải thoát khỏi dấu chéo ngược để có được một dấu chéo ngược thực:

escape_javascript("\b")  -> this is a backspace character! 
escape_javascript("\\b") -> this is backslash-then-letter-b; 
           escaped for JavaScript literal to double-backslash-then-b. 

Vì vậy, đây là tốt:

"'"+escape_javascript(myvar)+"'" 

cách khác, bạn có thể sử dụng một Bộ mã hóa JSON để tạo chuỗi ký tự JavaScript bao gồm các dấu ngoặc kép xung quanh.

+5

cũng có một bí danh "j" đơn giản: "'" + j (myvar) + "" " – Kodak

+2

Ghi chú cho người đọc gần đây: như đường ray 3.2 (và có lẽ trước đây) phương pháp là' escape_javascript' chứ không phải ' javascript_escape' –

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