2012-06-21 2 views
0

JSON 응답을 구문 분석하여 ASP.NET 날짜를 자바 스크립트 날짜로 변환하려고합니다. 내가하고 그런 다음 new Date(1340298914781)json 파싱을위한 jQuery 아약스 변환기 설정

String.prototype.parseWithJSONDate = function() { 
    return this.replace(/\/Date\((.*?)\)\//gi, 'new Date($1)'); 
}; 

카드를 설치 변환 필터에 \/Date(1340299653555)\/ 정규 표현식 변환을 수행하는 자바 스크립트 문자열 개체를 확장

{"Id":1,"Title":null,"Description":null,"Content":null,"PropagateModel":false,"Status":0,"ComponentPublishDate":"\/Date(1340299653555)\/"} 

:과 같이

실제 응답이 보인다 실제 구문 분석.

$.ajaxSetup({ 
     dataFilter: function(data, dataType) { 
     if (dataType === "json") { 
      return data.parseWithJSONDate(); 
     } 
     return data; 
     } 
    }); 

이 변환기는 작동하지 않습니다. 내가 가진 첫 번째 문제는 컨버터가 돌아온 후에 응답이 어떻게 든 손상 될 것입니다. 나는 JSON.parse과 같은 것을 return JSON.parse(res)과 같이 기능의 끝에서 호출하는 것으로 고정시켰다. 왜 전 세계에서 이미 JSON 문자열 인 문자열을 파싱해야합니까?

두 번째 문제는 실제 정규식이 값을 대체하지 않는 것입니다. 이상한 것은 샘플 JSON 문자열의 함수 밖에서 테스트 해 보았는데 잘 작동했습니다.

아무도 제안 할 수 있습니까? 감사!

업데이트 1 나는 내 첫 질문에 대한 대답을 생각해 냈습니다. 내 변환기가 json 및 텍스트 데이터 형식으로 실행되고있었습니다. 아마 내가 반환 값을 JSON으로 명시 적으로 변환해야했던 이유는 무엇일까요? 변환기에서 텍스트 데이터 형식을 제거하고 그에 따라 나머지 코드를 업데이트했습니다.

업데이트 2 날짜가 형식화 된 문자열 인 새보기 모델을 만들었습니다. 세상에서 가장 좋은 것은 아니지만 jQuery 아약스 이벤트로 고생하는 것보다 낫다. dataFilter를 사용하는 대신

+0

JSON String 또는 JavaScript 객체를 반환 할 것으로 기대하십니까? –

+0

내 이해를 바탕으로, 변환기는 json 문자열을 이미 허용합니다. 그래서 json 문자열을 반환해야한다고 가정합니다. 적어도이 일은 내가하려고하는 일입니다. –

+0

기본적으로'text json' 변환기는 JSON 문자열을 나타내는 JavaScript 객체를 반환합니다. jQuery가 평가하기 전에 단순히 json 문자열을 변경하려면 dataFilter를 사용하십시오. –

답변

0

모든 날짜가 서버에서 적절한 형식으로 변환되고 클라이언트에 값이 반환되었습니다. 최적의 솔루션은 아니지만 데이터 필터로 변환하는 방법을 파악할 수 없습니다.

1

봅니다 :

$.ajaxSetup({ 
    dataFilter: function(data,dataType) { 
     if (dataType === "json") { 
      return data.parseWithJSONDate(); 
     } 
     return data; 
    } 
}); 

이것은 당신의 parseWithJSONDate 방법이 유효한 JSON 문자열을 반환한다고 가정합니다. 그런 다음 데이터 유형으로 json을 사용하면됩니다.

dataFilter 메서드의 목적은 raw respondsetext를 위생 처리하는 것입니다.이 상황에서는 완벽하다고 생각합니다. 유효한 json을 반환하면 jquery는이를 구문 분석하여 정상적인 자바 스크립트 객체로 변환합니다.

편집 : 아마 그게 유효하지 않습니다 이후 json은 new Date()에서 그것에 대해 생각하는 지금은 실패합니다.

+0

내가 제안한대로 데이터 필터로 전환했습니다. 선언에서 텍스트 데이터 형식을 제거한 후에도 변환기가 실행되지 않았습니다. 데이터 필터가 여전히 날짜를 변환하지 않습니다. 새로운 Date()가 유효한 JSON이 아니라는 것이 무슨 뜻인지 확신 할 수 없습니다. 나는 그것을 평가하려고하는 것이 아니라 단순히 포맷팅을 수정하고 필요할 때 나중에 평가합니다. –

+0

데이터 타입이'json'이라면, jQuery는 당신에게 그것을 알려주 든 상관없이 그것을 평가할 것이다. –

관련 문제