2011-02-23 3 views
34

jQuery 및 JSON을 사용하여 일부 기본 연산을 수행하려고합니다. JSON 응답을 내 플레이 프레임 워크 응용 프로그램에서 받아들이는 데 어려움을 겪고 있습니다. 다음은 여전히 ​​오류를 생성하는 코드의 단순화 된 버전입니다.jQuery JSON 응답은 항상 ParseError를 트리거합니다.

$.ajax({ 
    type: 'POST', 
    url: "@{FrontEnd.isUsernameAvailable()}", 
    data: "name=thisnameisavailable", 
    cache: false, 
    success: function(data) { 
     console.log("Success... "); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log("Error... " + textStatus + "  " + errorThrown); 
    }, 
    dataType: 'json' 
}); 

오류 콜백은 항상 트리거됩니다. 오류도 확인 다양한 JSON 린트 도구를 보여줍니다 그것은

오류를 표시 ... parsererror jQuery15001997238997904205_1298484897373는 방화범을 통해 반환 된 JSON을 검사

라고하지 않았다. dataType을 "text"로 변경하면 성공을 호출 할 수 있습니다. 하지만 유효 JSON을 반환해야하므로 jQuery 유효성 검사 플러그인의 일부로 isUsernameAvailable 호출을 사용하려고합니다.

+0

응답 유형이 application/json (확실한 답은 yes라고 생각합니다)입니까?) 그리고 json은 { "field": "value", ...}와 (과) 비슷합니다 ... 때때로 큰 따옴표가 사용됩니다 값이 문자열 유형이고 부울 또는 int가 아닌 경우 중요하고 고아가 아닌 ","... " 어쨌든 해결 방법이있는 것 같습니다. – mandubian

+0

질문에 내 대답은 ...내 PHP는 echo 간단한 텍스트를 사용하여 되돌려주었습니다. 그래서 내 dataType을 'text'로 변경하면 작업이 끝납니다. 감사합니다 :) – Pitto

답변

33

어쩌면 내가 오해하고 있지만 dataTypetext으로 설정하고 JSON.parse()로 반환 된 데이터를 설정할 수 없습니까? 난 그냥 api.jquery.com/jQuery.ajax에서 살펴 보았다

와 jQuery를 1.5 당신이 종류의 타입 변환을 할 수있는 것 같습니다 : 추가

success: function(data) { 
    data = JSON.parse(data); 
    // process data 
}, 

편집 일반적으로 솔루션에 (단지 이전에 코멘트를) 동의했다. "여러 개의 공백으로 구분 된 값 : jQuery는 jQuery 1.5에서 data-type을 Content-Type 헤더에서받은 값으로 변환 할 수 있습니다. 예를 들어 텍스트 응답을 XML로 처리하려면" 텍스트 xml "에 대한 dataType." 어쩌면 "text json"을 시도해 볼 수 있습니다.

+0

내가 들어가야 할 방향이 될 수 있습니다. "json"을 사용하는 이유는 jQuery 유효성 검사 플러그인에 JSON을 반환하는 원격 유효성 검사가 필요하기 때문입니다. – Chesrae

+5

나는 http://api.jquery.com/jQuery.ajax/를 살펴 봤는데 jQuery 1.5와 같이 타입 변환을 할 수있다. "여러 개의 공백으로 구분 된 값 : jQuery는 jQuery 1.5에서 data-type을 Content-Type 헤더에서받은 값으로 변환 할 수 있습니다. 예를 들어 텍스트 응답을 XML로 처리하려면" 텍스트 xml "에 대한 dataType." 어쩌면 "text json"을 시도해 볼 수 있습니다. – ggutenberg

+2

jQuery 유효성 검사 플러그인 코드 자체에서 "json"을 "text json"으로 변경했으며 모든 것이 완벽하게 작동합니다. 대답 주셔서 감사합니다,하지만 난 아직도 "json"이 작동하지 않는 이유를 혼동스러워합니다. Content-Type 헤더가 application/json으로 설정되었습니다. – Chesrae

12

jQuery 1.5로 업그레이드하자마자 동일한 오류가 발생했습니다. JQuery 1.5와 호환되지 않는 jquery 유효성 검사 플러그인을 사용하고 있기 때문에 제 문제가있는 것으로 나타났습니다. jquery 유효성 검사 플러그인을 제거하면 dataType json으로 $ .ajax()가 올바르게 작동합니다.

JQuery와 유효성 검사 플러그인 여기 호환성에 대한

더 많은 정보 : 이유가 있었다 나는 또한 "parsererror jQueryNNNN_NNN가 호출되지 않은"가지고 http://bugs.jquery.com/ticket/8118

+0

이것은 나도 찾아 냈다. 이것이 문제였다. jquery.validate의 충돌. –

+1

jQuery 유효성 검사의 새 버전 (1.8)은이 문제를 해결하고 jQuery 1.5.x와 호환됩니다. http://jquery.bassistance.de/validate/changelog.txt –

+0

에서 자세한 정보를 얻을 수 있습니다.이 질문은 정답입니다. JonnyO에게 감사드립니다! – Dav

3

(사용 JSONP와 jQuery를 1.7.2) 그 값 중 하나 반환 된 json 구조에는 개행이 포함되어 있습니다. 희망이 있으면 도움이됩니다.

2

callback=? 부분이 포함되어 있기 때문에 parseerror이 나왔습니다. This is a magic string which activates JSONP functionality. 이 callback=?jQuery.getJSON(..)와 더 이상 호환 없었다에서

내 서버 측의 REST API는 JSON으로 JSONP 변경으로

는 데이터 형식이 돌아왔다. 이 경우 jQuery.getJSON(..)success 콜백을 호출하지 않지만 대신 fail 콜백을 호출합니다.

url 매개 변수에서 callback=? 부분을 제거하여이 문제를 해결했습니다.