2013-01-18 4 views
10

아약스로드시 select2을 사용하려고합니다. 여기 select2 with ajax post 메서드

내 코드입니다 :

clonedTemplate.find('[id^=detailsPhaseFinanceMinor_]').select2({ 
    placeholder: "Select", 
    minimumInputLength: 1, 
    ajax: { // instead of writing the function to execute the request we use Select2's convenient helper 
     type: 'POST', 
     contentType: "application/json; charset=utf-8", 
     url: "mapBasic.aspx/GetFinSys", 
     dataType: 'json', 
     data: function (term, page) { 
      return "{'term':\"" + term + "\"}"; 
     }, 
     results: function (data, page) { // parse the results into the format expected by Select2. 
      // since we are using custom formatting functions we do not need to alter remote JSON data 
      return { results: data.Value }; 
     } 
    } 
}); 

Ajax 호출은 같은 페이지의 코드 숨김에서의 WebMethod/pagemethod이다 :

[WebMethod] 
    public static List<LookupCodeItem> GetFinSys(string term) 
    { 
     string stringToCompareTo = term.ToLower(); 

     List<LookupCodeItem> result = new List<LookupCodeItem>(); 


     // FIN SYS 
     using (mapEntities db = new mapEntities()) 
     { 
      List<MPO_FINSYS_AMT> finSysCodes = (from x in db.MPO_FINSYS_AMT 
               select x).ToList(); 

      foreach (MPO_FINSYS_AMT item in finSysCodes) 
      { 
       string valKey = string.Format("{0}.{1}.{2}", item.FY, item.MDOT_MPO_CD, item.FIN_SYS); 
       LookupCodeItem x = new LookupCodeItem(); 
       x.Value = valKey; 
       x.ShortDescription = string.Format("{0}.{1}.{2}", item.FY, item.MDOT_MPO_CD, item.FIN_SYS); ; 
       x.LongDescription = string.Empty; 
       result.Add(x); 

      } 
     } 

     return result; 
    } 

텍스트 상자에 데이터를 입력의 POST 요청이 이루어지고 json 보내기가 올바르게 포맷 된 것 같습니다.

그러나 페이지 메쏘드의 응답은 전체 HTML 페이지입니다. ajax 호출에서 "contentType"을 적절히 설정하지 않으면 게시 메서드에서이 문제가 발생할 수 있다는 것을 알고 있습니다. 나는 페이지에서 작동하는 다른 모든 Ajax 호출 (select2를 사용하지 않음)과 동일하게 설정했습니다.

select2는 "contentType"속성을 무시합니까? 아니면 내가 잘못 한 다른 것이 있습니까? Issue 492 - Add Support for contentType to Ajax

그것을 통해 ContentType을 통과하지 않는 것 같습니다 :

은 **이 게시 한 후 편집 ** , 나는 선택 2의 GitHub의 사이트에 나와이 문제를 발견했다. selet2가 ajax 헬퍼에 내장되어 있고 수동으로 정의 된 것을 사용하는 것을 우회 할 수 있습니까?

답변

-5

[webmethod] 대신 데이터 호출에 WebApi 또는 ServiceStack을 사용하는 것이 좋습니다. I이었다

+0

이것은 답변이 아닌 의견에 달아야하는 권장 사항입니다. 또한 프로그래밍 기술을 변경하면 OP가 실제로 어떻게 도움이 될까요? – ilter

+0

포스터를 쉽게 제안/지원되는 방법으로 수정하려고했습니다. 이 일이 7 개월 전에 완료되었으므로 지금은별로 할 수 없습니다. :-) –

3

이 같은 문제가 및 솔루션 이하 나를 위해 작동 :

ajax: { 
    ... 
    params: { // extra parameters that will be passed to ajax 
     contentType: "application/json; charset=utf-8", 
    } 
    ... 
} 
1

하는 게시물 요청에 CSRF 토큰을 추가하는 것을 잊지 마십시오. 클라이언트 측에서는 모든 것을 올바르게 할 수 있지만 토큰이 없기 때문에 서버가 요청을 거부 할 수 있습니다. 자세한 내용은 PHP Laravel Framework : https://laravel.com/docs/5.4/csrf#csrf-x-csrf-token을 참조하십시오.