2017-03-03 1 views
0

녹아웃 (v3.2) 자동 완성을 사용 중이고 값 목록을 반환하는 ajax 호출이 있습니다. "1"SkillName ":"검사 기술 1 ">"[{ "SkillId -녹아웃 자동 완성을 위해 ajax 호출 로컬 변수에서 반환 된 객체 매핑 문제

var remoteData = $.ajax({ 
       url: '@Url.Action("GetAllSkills", "EmployeeSkills")', 
       data: { }, 
       dataType: 'json', 
       type: 'GET', 
       contentType: "application/json; charset=utf-8", 
       success: function (data) { 
        var array = ($.map(data, function (item) { 
         return { 
          id: item.SkillsId, 
          name: item.SkillName 
         }; 
        }));  
       } 
      }); 

목적은 다음 데이터가 '에서 responseText'라는 속성을 가지고있는 RemoteData 변수에 할당 리턴 }, { "SkillId": 3, "SkillName": "테스트 스킬 3"}, { "SkillId": 4, "SkillName": " SkillId ": 5,"SkillName ":"Test Skill 5 ", {"SkillId ": 6,"SkillName ":"Test Skill 6 "}, {"SkillId ": 7, SkillName ":"SkillName ":"SkillName ":"SkillName ":"SkillName ":"Test Skill 34 "}, {"SkillId ": 11 , "SkillName": "xyz"}, { "SkillId": 12, "SkillName": "완전히 새로운 스킬!"}, { "SkillId": 13, "SkillName": "또 다른 새로운 스킬"}, { " SkillId ": 1002,"SkillName ":"새 테스트 기술 1 "}, {"SkillId ": 1001,"SkillName ":"test1 "}, {"SkillId ": 1002,"SkillName ":". NET v4.5 "}, {"SkillId ": 1003,"SkillName ": { "SkillId": 1006, "SkillName": "MVC"}, { "SkillId": 1007, "SkillName": " "SkillId": 1009, "SkillName": "Angular"}, { "SkillId": 1010, "SkillName": "Test" (100)는 "}]"나는 다음과 같은 코드를 내보기 모델 내부

... 나는 다음과 같은 오류를 얻고있다

function ActivityViewModel() { 
    var self = this; 
    self.skills = remoteData; 
    self.selectedOption = ko.observable(''); 
    self.options = self.skills.map(function (element) {  
     return { 
     label: element.SkillName, 
     value: element.SkillsId, 
     object: element 
     }; 
    }); 

은 -> self.skills.map 새로운 ActivityViewModel에서 함수가 아닙니다.

왜 이런 일이 발생하는지 알 수 없습니다. 어떤 제안?

답변

1

ajax 호출 결과에 remoteData를 지정합니다. 이것은 ajax 호출에 의해 검색된 값으로 설정하는 것과 같지 않습니다. ajax 함수는 값을 검색하기 위해 콜백을 추가해야하는 promise 객체를 반환합니다.

jQuery Deferred and Promise walkthrough

대신 성공 콜백 내부에있는 RemoteData 변수에 할당하십시오. 나머지 코드 구조에 따라 작동하지 않을 수 있습니다. ajax 호출이 완료되고 성공 콜백에 도달하기 전에 remoteData 변수를 사용하면 여전히 정의되지 않은 것처럼 보입니다.

var remoteData; 
$.ajax({ 
    url: '@Url.Action("GetAllSkills", "EmployeeSkills")', 
    data: {}, 
    dataType: 'json', 
    type: 'GET', 
    contentType: "application/json; charset=utf-8", 
    success: function (data) { 
     remoteData = ($.map(data, function (item) { 
      return { 
       id: item.SkillsId, 
       name: item.SkillName 
      }; 
     })); 
    } 
});