2009-03-19 24 views
8

Tôi đang cố gắng sử dụng jQuery và JSON với Dịch vụ web C# mà tôi đã viết. Không có vấn đề gì, mã sau đây sẽ chỉ xuất ra trong XML.Dịch vụ web C# sẽ không xuất JS, chỉ có XML

Webservice Mã

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string HelloWorld() { 
    return "Hello World!"; 
} 

Tôi cũng đã những thuộc tính này được gán cho lớp

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ScriptService] 

jQuery Mã

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "ScheduleComputerDS.asmx/HelloWorld", 
    data: "{}", 
    dataType: "jsonp", 
    success: function(data) { 
     alert(data); 
    } 
}); 

Trang ASMX luôn retur ns là loại nội dung "text/xml". Bất cứ điều gì tôi đang mất tích?

CHỈNH SỬA: Để đối phó với một vài câu trả lời:

Nếu tôi có các kiểu dữ liệu như chỉ là "json" nội dung vẫn là XML và jQuery cũng sẽ không gọi hàm callback của tôi. Nếu tôi thêm "& gọi lại =?" vào url, IIS ném lỗi HTTP 500.

Lớp học của tôi được kế thừa từ "System.Web.Services.WebService".

Từ thực hiện một số nghiên cứu về câu trả lời của các bạn, có vẻ như tôi cần phải gây rối với WCF. Thật không may là JSON được trả lại được thiết kế cho MS Ajax và có rất nhiều bloat vô ích cho việc sử dụng của tôi. Tôi có thể nhìn vào một thư viện nguồn mở như Jayrock hoặc một cái gì đó tương tự.

Cảm ơn sự giúp đỡ của bạn!

+0

Im mới vào Stackoverflow vì vậy tôi không biết cách nhận xét này sẽ xem xét tham chiếu đến những người khác ... Nếu tôi có kiểu dữ liệu là "json" thì nội dung vẫn là XML và jQuery cũng sẽ không gọi chức năng gọi lại của tôi. Nếu tôi thêm "& callback =?" vào url, IIS ném lỗi HTTP 500. – TheDude

+0

@TheDude - bạn có thể chỉnh sửa câu hỏi gốc để thêm thông tin này vào. Có liên kết chỉnh sửa bên dưới các thẻ ở phía dưới bên trái của phần câu hỏi –

+0

Nếu bạn có thể sử dụng WCF REST Starter Kit, chỉ cần phát hành Xem trước 2 – bendewey

Trả lời

2

Theo như tôi biết, ScriptService thuộc tính chỉ cho phép các dịch vụ để tự động tạo một proxy JavaScript (bằng cách thêm/js đến địa chỉ endpoint - ScheduleComputerDS.asmx/js trong trường hợp của bạn). Nó không cho phép bạn gọi các hoạt động trên dịch vụ theo cách bạn đang cố gắng làm.

Thay vào đó, bạn có thể sử dụng dịch vụ RESTful WCF (yêu cầu .NET 3.5) mà bạn có thể truy cập bằng cách gửi URI được định dạng đúng thông qua HTTP GET.

6

Tôi nghĩ rằng có một typo:

dataType: "jsonp", 

nên là:

dataType: "json", 
+0

tuyệt vời:) Tôi đã mắc lỗi này gần đây nhưng tôi đã có "kịch bản" trong đó. đã được sao chép và dán từ ví dụ –

+0

Ah, không +1 sau đó? lol – eduncan911

+1

Tôi biết nó là một bài cũ, tôi chỉ muốn chắc chắn rằng tất cả mọi người mới về điều này, không rơi trên con đường sai, của nó 'jsonp' không có typo ở đó, kiểm tra http://json-p.org/ – Luis

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