playframework - jQuery JSON 응답은 항상 ParseError를 트리거합니다.




(5)

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

$.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'
});

오류 콜백은 항상 트리거됩니다. 그것은 표시

오류 ... parsererror jQuery15001997238997904205_1298484897373이 (가) 호출되지 않았습니다.

Firebug를 통해 반환 된 JSON을 검사하면 오류가 표시되지 않으며 다양한 JSON 보풀 도구도 유효성을 검사합니다. dataType을 "text"로 변경하면 성공을 호출 할 수 있습니다. 하지만 유효 JSON을 반환해야하므로 jQuery 유효성 검사 플러그인의 일부로 isUsernameAvailable 호출을 사용하려고합니다.


Answers

나는 또한 "parserererror jQueryNNNN_NNN은 (jsonp와 jQuery 1.7.2를 사용하여) 호출되지 않았다."그 이유는 반환 된 json 구조의 값 중 하나가 개행을 포함하고 있기 때문이다. 희망이 사람을 도움이됩니다.


어쩌면 내가 오해하지만, dataTypetext , JSON.parse ()로 반환 된 데이터를 설정할 수 없습니까?

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

일반적으로 동의 한 해결책을 추가하기 위해 편집 됨 (이전에는 의견 만 있음) :

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


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

jquery 유효성 검사 플러그인 비 호환성에 대한 자세한 내용은 http://bugs.jquery.com/ticket/8118 하십시오.


urlcallback=? 포함되어 있기 때문에 parseerrorparseerror . callback=? 부품. 이것은 JSONP 기능을 활성화하는 매직 문자열입니다 .

내 서버 측의 REST API가 JSONP에서 JSON으로 변경됨에 따라 반환 된 데이터 형식이 jQuery.getJSON(..) 더 이상 호환되지 않습니다 jQuery.getJSON(..) callback=? . 이 상황에서 jQuery.getJSON(..)success 콜백을 호출하지 않지만 대신 fail 콜백을 호출합니다.

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


jQuery에서 필자가 가장 좋아 exist 메소드가있다.

$.fn.exist = function(callback) {
    return $(this).each(function () {
        var target = $(this);

        if (this.length > 0 && typeof callback === 'function') {
            callback.call(target);
        }
    });
};

선택자가 존재하지 않을 때 콜백을 지원하는 다른 버전

$.fn.exist = function(onExist, onNotExist) {
    return $(this).each(function() {
        var target = $(this);

        if (this.length > 0) {
            if (typeof onExist === 'function') {
                onExist.call(target);
            }
        } else {
            if (typeof onNotExist === 'function') {
                onNotExist.call(target);
            }
        }
    });
};

예:

$('#foo .bar').exist(
    function () {
        // Stuff when '#foo .bar' exists
    },
    function () {
        // Stuff when '#foo .bar' does not exist
    }
);






jquery json playframework