2012-05-18 3 views
6

내 경우 JavaScript 개체를 HTML 마크 업으로 동적으로 분할하려고합니다. 데이터를 가져온 후에 문자열을 준비하고 문자열에서 객체를 만든 다음 HTML 마크 업으로 그 객체를 뱉습니다.JavaScript - JavaScript 개체 속성 값의 작은 따옴표 이스케이프

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

는 나중에 다른 작업에, 같은 버튼 클릭으로, 나는 FIRSTNAME을 끌어 시도하고 FIRSTNAME 속성의 값은 작은 따옴표를 처리하기 위해 탈출하지 않기 때문에 그것은 나에게 자바 스크립트 오류를 ​​제공합니다. 코드 백엔드에서 객체 문자열을 준비하는 동안 할 수는 있지만 대신 클라이언트 측에서 무언가를하고 싶습니다.

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

자바 스크립트에서 개체에서 가져 오는 동안 문자를 이스케이프 처리 할 수있는 방법이 있습니까?

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

+0

방법 : 가장 쉬운 방법은 그 C#을 문자열에있는 경우 브라우저에 실제 출력은 백 슬래시를 포함하도록 너무 백 슬래시를 이스케이프해야한다는 점에 주목, 역 슬래시를 이스케이프 아마 var fileUploadDic = { 'firstname': "조앤", "성": 'Macy', 'country': 'USA'}; ? – jimpic

답변

2

당신이 보여 코드의 첫 번째 라인은 유효한 자바 스크립트를하지 않습니다. 'Jo\'hn' 또는 "Jo'hn" 중 하나 여야합니다.즉, JS 문자열이 작은 따옴표로 인용되면 백 슬래시로 문자열 내의 각 작은 따옴표 문자를 이스케이프해야하지만 JS 문자열이 큰 따옴표로 인용되면 문자열 내에서 자유롭게 단일 문자를 사용할 수 있습니다. 두 개의 작은 따옴표를 연속으로 사용하려는 경우 'Jo\'\'hn' 또는 "Jo''hn".

잘못된 JavaScript가 실행되지 않으므로이 클라이언트 측을 고칠 수있는 방법은 없습니다.

서버 측에서 수정해야합니다.

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

그래서 개체를 만든 후에 클라이언트 측에서 개체를 수정할 수 없습니다. – Karan

+0

아니요. 구문 오류로 인해 코드 실행이 중지되므로 개체가 클라이언트 측에서 생성되지 않습니다. – nnnnnn

0

당신이 사용할 수있는 \ '...

jsfiddle

당신이 원하는 무엇인가요? jsfiddle에서 정의에 "큰 따옴표"를 사용 했으므로 실제로는 작은 따옴표를 사용하지 않고 도망 치지 않는 것 같습니다.하지만 지금은 내가 원하는 것을 이해하지 못한다고 생각합니다.

실제로 ... 당신은 "조 \ '\'HN"를 사용할 수 있습니다 후 나타나는 두 개의 작은 따옴표를 원하는 나를 위해 일한

2

을 문자열에서 당신이 사용 준비한다.

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

이제 클라이언트 측과 같이 표시됩니다 :

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

당신이 '' 클라이언트 측을 교체 할 경우 [varstr].replace(/''/g,"\\'")을 사용할 수 있습니다,하지만 난

7

당신이 찾고 있지만 (오류가 이미 전송 된 문자열의 도착과 해석에 슬로우됩니다) 클라이언트 측이 너무 늦을 것 같아 클라이언트 측 솔루션에서 가장 안정적이고 신뢰할 수있는 방법은 서버 측 JavaScriptSerializer를 사용하여 C# 객체를 JSON 문자열로 직렬화하는 것입니다.이 방법은 서버 측 JavaScriptSerializer를 사용하여 보수적 인 방식으로 Robustness Principle을 준수해야합니다.

이러한 라이브러리는 이러한 문제를 해결하고 API를 사용하는 사람들 (이 경우 사용자)이 특수한 방식으로 데이터를 처리해야하는 필요성을 없애기 위해 설계되었습니다. 단순히 문자열 리터럴이 끝나지 않았기 때문입니다.

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); 

다음, AJAX 요청에서 클라이언트 측에 다시 sJSON를 반환 및 프로세스를 당신이 다른 JSON 문자열을하는 것처럼.

자세한 내용과 자세한 내용은 Convert Objects to JSON in C# Using JavaScriptSerializer을 참조하십시오. 문자열 'Jo''hn' 그런 그 안에 작은 따옴표를 가질 수 없기 때문에

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

:

+0

이것은 좋은 대답입니다. – joshp

관련 문제