2015-02-05 7 views
0

내 이해 관계자가 클라이언트 측 자동 완성을 원하는 텍스트 상자 ID = "I7"이있는 일반 양식이 있습니다. 데이터의 서버 측 페칭을 사용하여 작업하고 있지만 값을 사용하여 배열을로드하려고하면 배열이 페이지로드 이후에 채워진 것처럼 보입니다.텍스트 필드에 자동 완성을위한 SharePoint 목록의 JQuery 배열로드

근무 코드 : 너희들은 무엇을 제안 할

 $(document).ready(function() { 
     supportScripts.actReportingSetup(); 

    headers = { 'Accept': 'application/json;odata=verbose', 'Content-Type': 'application/json;odata=verbose' }; 
     $("#I7").autocomplete ({ 
      source: function(request, response){ 
       var term = request.term; 
      $.ajax({ 
       url: "http://portal/_api/web/lists/getByTitle('DocumentTypes')/items?$select=Title,TypeDescription&$top=500&$filter=startswith(Title,'" + term + "')", 
       headers: headers, 
       success: function (data) { 
        response($.map(data.d.results, function(item){ 
         return{ 
          label: item.Title + " - " + item.TypeDescription, 
          value: item.Title 
         } 
        })); 
       } 
      }); 
     } 
    }); 
}); 

이 클라이언트 측의 배열에서 실행 얻으려면?

+0

해결책을 얻었습니까? 비슷한 문제에 봉착했습니다. – Stacker

+0

하지만 더 이상 해결책이 없어서 더 이상 일하지 않습니다. :-) – CharlieHorse

+0

흠, 상관 없어요! $ 아약스 ({ \t \t \t \t URL : URL, \t \t \t \t 헤더 : 헤더, \t \t \t \t 성공 : 기능 (데이터) { \t \t \t \t 덕분에 어쨌든 – Stacker

답변

0

지연된 약속을 사용하는 것이 좋습니다. 그것은 다음과 같이 보일 것입니다 : http://api.jquery.com/deferred.promise/

작동하지 않는 경우에, 저에게 알려 주시면 도와 최선을 다하겠습니다 :

var defer = $.Deferred(); 

defer.done(function(){ 
    // code inside this block will run after your promise is resolved 
}); 

function asyncEvent(){ 
    $.ajax({ 
     url:"http://yourUrlHere", 
     headers: headers, 
     success: function(data){ defer.resolve(data) }, 
     error: function(status){ defer.reject(status) } 
    }); 
    return defer.promise(); 
}); 

현재 jQuery를 연기 약속에 대한 자세한 정보를 찾을 수 있습니다.

+0

나는이 일을 결국 $ .each (data.d.results, function (i, item) { \t \t \t \t docTypeArray.push ( {label : item. 제목 + "-"+ item.TypeDescription, \t \t \t \t \t \t \t 값 : item.Title}); \t \t \t \t}); goAutoComplete (docTypeArray) \t \t \t \t} \t \t \t \t 오류 : 함수 (jqXHR, textStatus, errorThrown)는 { \t \t \t \t \t 경보 ("오류가되었습니다 \ n '+ errorThrown); \t \t \t \t \t \t }} \t) \t \t \t \t 함수 goAutoComplete (MYDATA) { \t \t \t \t $ ("#의 I7").자동 완성 ({ \t \t \t \t \t 소스 : MYDATA \t \t \t \t}); } – CharlieHorse

0

글쎄, 그 말은 못 생겼어. 포맷을 시도해 봅시다. 이것이 제가 한 일입니다.

$.ajax({ 
      url: URL, 
      headers: Headers, 
      success: function (data) { 
       $.each(data.d.results, function (i, item) { 
        docTypeArray.push(
         {label: item.Title + " - " + item.TypeDescription, 
         value: item.Title}); 
       }); 
       goAutoComplete(docTypeArray) 
      }, 
      error: function(jqXHR, textStatus, errorThrown){ 
       alert('There has been an error:\n' + errorThrown); 
      } 
     }) 


     function goAutoComplete(myData){ 
      $("#I7").autocomplete ({ 
       source: myData 
      }); 
     } 
+0

글쎄 너무 일할 것입니다! 그 방법도 시작했는데 잠시 후 많은 아약스 호출로 끝났습니다. 약속을 반환하면 각기 다른 성공을 위해 다른 아약스 함수를 작성할 필요가 없으므로 "후"함수를 분리 할 수 ​​있습니다. 그냥 생각. 그러나이 작품과 당신이 행복하다면, 나는 당신을 위해 행복합니다 :) – brennan