2012-05-18 45 views
6

Trong trường hợp của tôi, tôi đang cố gắng phân tách đối tượng JavaScript động vào đánh dấu HTML từ mã C# .NET phía sau. Sau khi nhận được dữ liệu, tôi chuẩn bị chuỗi và tạo đối tượng trong chuỗi và sau đó nhổ nó vào đánh dấu HTML.JavaScript - Thoát dấu nháy đơn trong giá trị thuộc tính đối tượng JavaScript

var fileUploadDic = { 'firstname': 'Jo''hn', 'lastname' : 'Macy' , 'country' : 'USA }; 

Sau đó trong một số hành động khác, chẳng hạn như nút bấm, tôi đã cố gắng để kéo firstname, và nó mang lại cho tôi một lỗi JavaScript vì giá trị trong thuộc tính FirstName không thoát để xử lý các dấu nháy đơn. Mặc dù tôi có thể làm điều đó trong khi chuẩn bị chuỗi đối tượng trong phần phụ trợ mã, nhưng tôi thích làm điều gì đó ở phía máy khách thay thế.

var dv = $('#dv1') 
dv.append(fileUploadDic.firstname); //gives me error. 
dv.append(fileUploadDic.lastname); 
dv.append(fileUploadDic.country); 

Có cách nào trong JavaScript, tôi có thể làm nhân vật thoát khi tìm nạp nó từ đối tượng hay không.

http://jsfiddle.net/uagFu/8/

+0

thế nào về var fileUploadDic = {'firstname': "Jo'hn", 'lastname': 'Macy', 'country': 'USA'}; ? – jimpic

Trả lời

2

Dòng đầu tiên của mã mà bạn thấy không phải là hợp lệ JavaScript:

var fileUploadDic = { 'firstname': 'Jo''hn', 'lastname' : 'Macy' , 'country' : 'USA }; 

Bởi vì chuỗi 'Jo''hn' không thể có dấu nháy đơn trong nó như thế. Nó cần phải là 'Jo\'hn' hoặc "Jo'hn".Đó là để nói rằng nếu chuỗi JS của bạn được trích dẫn với dấu nháy đơn bạn phải thoát từng ký tự trích dẫn trong chuỗi bằng dấu gạch chéo ngược, nhưng nếu chuỗi JS của bạn được trích dẫn với dấu ngoặc kép, bạn có thể sử dụng đơn lẻ một cách tự do trong chuỗi. Nếu bạn muốn có hai dấu nháy đơn trong một hàng 'Jo\'\'hn' hoặc "Jo''hn".

Bạn không thể làm gì để sửa lỗi phía máy khách này, vì JavaScript không hợp lệ sẽ không chạy.

Bạn phải sửa nó phía máy chủ; cách dễ nhất có lẽ là để thoát khỏi nó với một dấu gạch chéo, lưu ý rằng nếu đó là trong một C# chuỗi bạn sẽ cần phải thoát khỏi dấu chéo ngược quá do đó sản lượng thực tế để trình duyệt chứa một dấu chéo ngược:

"var fileUploadDic = { 'firstname': 'Jo\\'hn', 'lastname' : 'Macy' , 'country' : 'USA };" 
+0

vì vậy chúng tôi không thể sửa đối tượng ở phía máy khách sau khi tạo đối tượng. – Karan

+0

Không. Đối tượng sẽ không bao giờ được tạo ở phía máy khách vì lỗi cú pháp dừng mã chạy. – nnnnnn

0

Bạn có thể sử dụng \' ...

jsfiddle

Là những gì bạn muốn? Thực tế dường như không hoạt động mà không có lối thoát nào chỉ bằng một trích dẫn đơn, bởi vì bạn đã sử dụng "dấu ngoặc kép trong định nghĩa của mình trong jsfiddle ... nhưng bây giờ tôi nghĩ tôi không hiểu bạn muốn gì. muốn hai dấu nháy đơn để xuất hiện sau đó bạn có thể sử dụng "Jo \ '\' hn" ... làm việc cho tôi

2

Trong chuỗi bạn chuẩn bị sử dụng:.

"var fileUploadDic = { 'firstname': 'Jo\\'hn', 'lastname' : 'Macy' , 'country' : 'USA };" 

Bây giờ phía khách hàng mà sẽ trông giống như :

var fileUploadDic = { 'firstname': 'Jo\'hn', 'lastname' : 'Macy' , 'country' : 'USA }; 

Nếu bạn muốn thay thế '' phía khách hàng mà bạn có thể sử dụng [varstr].replace(/''/g,"\\'"), nhưng tôi nghĩ rằng phía khách hàng sẽ là quá muộn (Lỗi đã được ném vào đến và giải thích các chuỗi gửi)

7

Mặc dù bạn đang tìm kiếm một giải pháp phía máy khách, phương pháp ổn định và đáng tin cậy nhất để thực hiện điều này, một phương pháp tuân thủ Robustness Principle để bảo thủ những gì bạn gửi, sẽ sử dụng JavaScriptSerializer phía máy chủ để tuần tự hóa đối tượng C# của bạn thành chuỗi JSON.

Những thư viện này được thiết kế để giải quyết những vấn đề này và loại bỏ sự cần thiết cho người dùng API của bạn (trong trường hợp này là bạn) cần xử lý dữ liệu theo cách đặc biệt, đơn giản chỉ vì nó chứa một chuỗi ký tự chưa hoàn thành.

Employee oEmployee1 = 
    new Employee{Name="Pini",ID="111", Age="30"}; 

System.Web.Script.Serialization.JavaScriptSerializer oSerializer = 
    new System.Web.Script.Serialization.JavaScriptSerializer(); 
string sJSON = oSerializer.Serialize(oEmployee1); 

Tiếp theo, trả về sJSON quay lại phía máy khách từ yêu cầu AJAX của bạn và xử lý nó như bất kỳ chuỗi JSON nào khác.

Xem Convert Objects to JSON in C# Using JavaScriptSerializer để biết thêm thông tin và biết thêm chi tiết.

+0

Đây là một câu trả lời hay. – joshp

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