2011-02-25 4 views
0

나는 많은 연구를했으며 대답을 찾을 수 없습니다. JSTREE를 MVC3.0과 통합하려고합니다. 여기 내 자바 스크립트 설정입니다 :jsTree JSON with MVC

setupTree: function (treeDivId) { 
    $('#' + treeDivId).jstree({ 
     "json_data": { 
      "ajax": { 
       url: CustomTree.SectorLoadUrl, 
       type: "POST", 
       contentType: "application/json;charset=utf-8", 
       dataType: "json", 
       data: function (n) { 
        return { id: n.attr ? n.attr("id") : "0" }; 
       }, 
       success: function (data, textstatus, xhr) { 
        alert(data); 
       }, 
       error: function (xhr, textstatus, errorThrown) { 
        alert(textstatus); 
       } 
      } 
     }, 
     "themes": { 
      "theme": "default", 
      "dots": true, 
      "icons": false 
     }, 
     "plugins": ["themes", "json_data"] 

    }); 
} 

나는 또한 업로드 된 이미지에서 볼 수 있듯이 정확하게 데이터를 얻을 : 그러나 JSON RESPONSE

, 다음 코드 줄 : 항상

data: function (n) { 
        return { id: n.attr ? n.attr("id") : "0" }; 
       }, 

n에 -1을 반환합니다.

그리고 내 textstatus의 OnError 처리기에서 파서 오류가 발생합니다.

답변

5

저는이 질문이 누군가를 돕기를 희망하며 대답 할 것입니다.

나는 총 5 시간 동안 무슨 일이 벌어지고 있는지 이해하려고 노력하고 마침내 해킹을 추가했습니다.

방화 광을 사용하여 URL에 콜백이 추가 된 것으로 나타났습니다. 데이터가 반환되면 콜백이 실행되지 않습니다. 콜백을 지정하지 않았으므로 처음으로 살펴볼 항목입니다.

문서별로 jquery1.5 이상에서는 데이터 유형이 jsonp라고 생각되면 자동으로 콜백이 추가됩니다. 그러나 명시 적으로 'json'을 내 데이터 유형으로 언급 했으므로 콜백이 추가 된 이유를 이해할 수 없습니다.

다음은 jquery 설명서의 내용입니다. "jsonp": JSONP를 사용하여 JSON 블록에로드합니다. 추가 "? 콜백 =?" URL의 끝에 추가하여 콜백을 지정하십시오.

이렇게 나에게 무슨 일이 일어나는지 궁금합니다. 또한 jquery 1.5부터는 AJAX 호출에서 여러 데이터 유형을 지정할 수 있으며 jquery는 자동으로 변환을 시도합니다.

jQuery 설명서에 깊이 묻힌 내용은 다음과 같습니다. "jQuery 1.5부터는 jQuery가 dataType을 Content-Type 헤더에서받은 것으로 변환 할 수 있습니다."

그래서 데이터 형식을 텍스트로 반환하고 jquery를 사용하여 json으로 변환하는 것이 더 좋을 것이라고 생각했습니다. "json"대신 "text json"으로 데이터 유형을 변경 한 순간 모든 것이 마술처럼 작동하기 시작했습니다.

제 생각에, 새로운 jquery로 데이터 유형에 대한 자동 추론이 있습니다. 나는 엄격한 기한을 지키고있어이 문제를 더 이상 조사 할 수 없지만, 누군가 답변을 찾으면 게시하십시오.

setupTree: function (treeDivId) { 
    $('#' + treeDivId).jstree({ 
     "json_data": { 
      "ajax": { 
       "url" : CustomTree.SectorLoadUrl, 
       "type" : "POST", 
       "dataType" : "text json", 
       "contentType" : "application/json charset=utf-8", 
      } 
    }, 
    "themes": { 
     "theme": "default", 
     "dots": true, 
     "icons": false 
    }, 
    "plugins": ["themes", "json_data"] 

}); 
+0

나는 비슷한 문제를 가지고 있었고, JQuery와 1.5.1을 사용하여 parsererror을 받고했지만, 모든 jQuery를 1.4.4로 괜찮다고 :

여기 내 수정 된 자바 스크립트입니다. 데이터 유형을 "text json"으로 변경하면 1.5.1에서 다시 시작됩니다. 재미있는 점은 모든 아약스 호출이 깨지는 것은 아닙니다! – Catch22

+0

허 .. 그게 내 속임수 였어. (비록 "contentType"을 제거해야만 했어.) 매우 이상해. 고마워. +1 – JasCav

+1

@JasCav : HTTP 게시물을 사용하면 "contentType"이 바뀐다. text json을 "multipart/form-data"로 설정합니다 .HTTP 게시물에 json text를 설정하면 실패하는 것입니다. text json은 "type"에 대한 MIME입니다 : "GET". 생각이없는 예 ;-) –