2013-01-18 50 views
10

Tôi đang cố gắng sử dụng select2 với tải ajax.select2 với phương thức post ajax

Đây là mã của tôi:

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 }; 
     } 
    } 
}); 

Cuộc gọi ajax là một WebMethod/pagemethod trong code-behind của cùng một trang:

[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; 
    } 

Khi nhập dữ liệu vào các textbox, các Yêu cầu POST được thực hiện và json được gửi dường như được định dạng đúng.

Tuy nhiên, phản hồi từ trang đích là toàn bộ trang html. Đó là sự hiểu biết của tôi rằng điều này có thể xảy ra với các phương thức đăng nếu bạn không có "contentType" được đặt đúng trong cuộc gọi ajax. Tôi đã đặt nó giống như tất cả các cuộc gọi ajax khác của tôi hoạt động trên trang (chúng không sử dụng select2).

Chọn2 có bỏ qua thuộc tính "contentType" không? Hay có điều gì khác tôi đã làm sai?

** EDIT ** Sau khi đăng này, tôi thấy vấn đề này được liệt kê tại trang web github Select2 của: Issue 492 - Add Support for contentType to Ajax

Dường như nó không vượt qua contentType qua. Tôi có thể bỏ qua selet2 được xây dựng trong helper ajax và sử dụng của riêng tôi được xác định bằng tay?

Trả lời

-5

Tôi khuyên bạn nên sử dụng WebApi hoặc ServiceStack cho các cuộc gọi dữ liệu của bạn thay vì [webmethod].

+0

Đó là đề xuất nên được đưa vào nhận xét, chứ không phải trong câu trả lời. Ngoài ra, làm cách nào để thay đổi kỹ thuật lập trình giúp OP, thực sự? – ilter

+0

Chỉ là cố gắng để có được áp phích một cách dễ dàng đề nghị/hỗ trợ để sửa chữa. Thấy như điều này đã được thực hiện cách đây 7 tháng, không có nhiều tôi có thể làm gì về nó ngay bây giờ! :-) –

3

Tôi đã có cùng một vấn đề và giải pháp dưới đây làm việc cho tôi:

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

Đừng quên để thêm CSRF token bài yêu cầu của bạn. Nó có thể là bạn làm mọi thứ ngay trên phía máy khách, nhưng máy chủ từ chối yêu cầu, bởi vì nó thiếu mã thông báo. Xem ví dụ cho PHP Laravel Framework: https://laravel.com/docs/5.4/csrf#csrf-x-csrf-token để biết thêm thông tin.

Các vấn đề liên quan