2012-03-28 30 views
6

Tôi có một dịch vụ web có chứa một phương pháp:ASMX webservice - trở JSON thay vì XML

[WebMethod] 
public string Movies() 
{ 
    using (var dataContext = new MovieCollectionDataContext()) 
    { 
     var query = dataContext.Movies.Select(m =>new{m.Title,m.ReleaseDate}).Take(20); 
     var serializer = new JavaScriptSerializer(); 
     return serializer.Serialize(query); 
    } 
} 

Phương pháp này đúng serializes đối tượng, nhưng khi tôi xem các phản ứng trong Firebug, nó trông như thế này:

<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://tempuri.org/">[{"Title":"SQL","ReleaseDate":"\/Date(1224007200000)\/"},{"Title":"Termonator Salvation","ReleaseDate":"\/Date(1224007200000)\/"}]</string> 

đây là jQuery phương pháp mà tôi sử dụng Kendo Data Source

$(function() { 
    alert("Welcome To Kendo"); 
    var dataSource = new kendo.data.DataSource(
       { 
        transport: { 
         read: { 
          type: "POST", 
          dataType: "json", 
          url: "/MovieService.asmx/Movies" 
          // contentType: "application/json; charset=utf-8" 

         } 
        }, 
        change: function (e) { 
         alert(e); 

        }, 
        error: function (e) { 
         alert(e[2]); 
        }, 
        pageSize: 10, 
        schema: { 
         data: "d" 

        } 


       }); 

    $("#MovieGridView").kendoGrid({ 
     dataSource: dataSource, 
     height: 250, 
     scrollable: true, 
     sortable: true, 
     pageable: true, 
     columns: [ 
      { field: "Title", title: "Movie Name" }, 
      { field: "ReleaseDate", title: "Movie Release" } 
      ], 
     editable: "popup", 
     toolbar: ["create"] 
    }); 
}); 

Đoạn mã trên s làm thế nào những gì tôi đang làm trong jQuery và khi các sự kiện lỗi gọi tôi đã nhận lỗi này

SyntaxError: JSON.parse: unexpected character 

Làm thế nào tôi có thể chuyển đổi dữ liệu trên vào JSON để tôi có thể sử dụng nó trong jQuery? Và tôi đang đi sai ở đâu?

+0

Tại sao bạn đang sử dụng JSONP đây? Nó không có ý nghĩa. – Joe

+0

ok tôi loại bỏ jsonp nhưng vấn đề vẫn còn plz tương tự giải quyết nó –

+0

tôi tìm thấy một cách khác để làm điều này bằng cách sử dụng WCF và JSONP kết hợp rất mát mẻ của nó và làm việc hoàn hảo –

Trả lời

8

Bạn cần phải xác định ResponseFormat của phương pháp này:

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string GetMovies() { 
} 

Lưu ý: Vì lợi ích của những người khác đến câu hỏi này với vấn đề tương tự, nó cũng quan trọng cần lưu ý là bạn nên được sử dụng POST yêu cầu, không phải yêu cầu GET. Xem: JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks


EDIT

Dựa trên jQuery mà bạn đăng tải, bạn không gọi phương thức chính xác. Bạn C# định nghĩa một phương thức có tên là GetMovies, nhưng jQuery của bạn đang cố gắng gọi một phương thức gọi là 'Phim'.

này:

url: "/MovieService.asmx/Movies" 

có nên thay đổi như thế này:

url: "/MovieService.asmx/GetMovies" 
+0

Và không sử dụng GET – Joe

+0

không có gì xảy ra cùng một vấn đề thân yêu –

+1

@HaseebKhan, trước hết, đừng gọi tôi là thân yêu :-). Thứ hai, đây là cách thích hợp để trả về dữ liệu có định dạng JSON. Vui lòng xem lại câu trả lời của tôi và xác nhận rằng bạn đã triển khai nó đúng cách trong môi trường thử nghiệm của mình. –

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