2013-07-29 2 views
1

Ajax 호출에서 직접 JSON 데이터를 매핑하고 바인딩하려고합니다. 경고는 요청 된 데이터를 표시합니다. 이 경고의 내용을 테스트 변수에 복사/붙여 넣으면 매핑이 올바르게 작동합니다. 결과에 직접 매핑하거나 바인딩 할 수없는 이유는 무엇입니까? '테스트'와 '결과 .d'의 차이점은 무엇입니까? (결과에 바인딩 - .d 없이도 작동하지 않습니다).Ajax를 통한 녹아웃 매핑 json

도움 주셔서 감사합니다.

var test = { "formulier": { "titel": "test", "formulier_id": 4, "vragen": [{ "vraag_id": 5, "vraag": "Hoe gaat het?", "soortvraag_id": 4, "soortwaarde_id": 13, "verplicht": false, "antwoorden": [] }, { "vraag_id": 6, "vraag": "Dit is een kopje", "soortvraag_id": 18, "soortwaarde_id": 13, "verplicht": false, "antwoorden": [] }, { "vraag_id": 3, "vraag": "vraag 3k", "soortvraag_id": 6, "soortwaarde_id": 13, "verplicht": false, "antwoorden": [{ "antwoord": "nieuw2", "antwoord_id": 7, "vraag_id": 3, "iscorrect": true }, { "antwoord": "echt waar?", "antwoord_id": 5, "vraag_id": 3, "iscorrect": false }, { "antwoord": "nieuw 123", "antwoord_id": 2, "vraag_id": 3, "iscorrect": false }, { "antwoord": "nieuw", "antwoord_id": 6, "vraag_id": 3, "iscorrect": false }] }] } } 

      // This doesn't work 
      $.ajax({ 
         type: "POST", 
         contentType: "application/json", 
         url: "../formulierService.asmx/getLeegFormulier", 
         data: "{'id': " + 4 + "}", 
         dataType: "json", 
         success: function (result) { 
          alert(result.d); //content of alert was pasted into var test above 
          var ViewModel = ko.mapping.fromJS(result.d); 
          ko.applyBindings(ViewModel); 
         } 
      }); 

      // This does work 
      var ViewModel2 = ko.mapping.fromJS(test); 
      ko.applyBindings(ViewModel2); 

답변

1

여기에서 fromS를 사용하려면 json 문자열을 js 객체로 deserialize해야합니다.

var test = JSON.parse(result.d);

다음, fromJS 대신에, 또 다른 옵션은 직접 fromJSON을 사용하는 것입니다

var ViewModel2 = ko.mapping.fromJS(test);

전화 :

+0

var ViewModel2 = ko.mapping.fromJSON(result.d); 예, ko.mapping.fromJSON는 않았다 장난. – Jeroen