2008-12-08 22 views
36

Tôi đang thực hiện một số thử nghiệm đơn giản (để chuẩn bị cho một dự án lớn hơn) để gọi ASP.NET WebMethod bằng cách sử dụng JQuery AJAX. Trong ví dụ của tôi, WebMethod của tôi trả về một chuỗi đơn giản. Tuy nhiên, khi tôi cố gắng gọi nó bằng cách sử dụng JQuery, tôi nhận được toàn bộ nội dung trang HTML được trả về thay vì chỉ chuỗi của tôi. Tôi đang thiếu gì?Jquery AJAX với ASP.NET WebMethod Returning Entire Page

Client Side:

$(document).ready(function ready() { 
     $("#MyButton").click(function clicked(e) { 
      $.post("Default.aspx/TestMethod", 
       {name:"Bob"}, 
       function(msg) { 
        alert("Data Recieved: " + msg); 
       }, 
       "html" 
      ); 
     }); 
    }); 

Server Side:

using System; 
using System.Web.Services; 

namespace JqueryAjaxText 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     [WebMethod] 
     public static string TestMethod(string name) 
     { 
      return "The value submitted was " + name; 
     } 
    } 
} 

Trả lời

18

Kiểm tra liên kết này. Tôi đã sử dụng một số bài viết khác của anh ấy để gọi dịch vụ WCF thành công. Hãy chắc chắn để kiểm tra các bài viết liên quan:

http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Đọc qua bài viết nhưng nó chủ yếu:

$("#Result").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "Default.aspx/GetDate", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
     $("#Result").text(msg.d); 
     } 
    }); 
}); 
+3

Hãy chắc chắn rằng web.config của bạn có chứa một cái gì đó tương đương với này, tùy thuộc vào phiên bản của bạn: ' \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t ' – Nathan

+1

Phần quan trọng của điều này là dòng contentType:" application/json; charset = utf-8 "không có dòng đó, nó sẽ trả về HTML. –

3

Hãy thử thay đổi các tham số cuối cùng "html" thành "văn bản". Tham số này chỉ định loại dữ liệu được trả về.

+0

Vấn đề là, phương pháp này không bao giờ được gọi. cuộc gọi AJAX chỉ đơn giản là nhận toàn bộ trang, được hiển thị giống như trình duyệt sẽ nhìn thấy nó. – Dana

+2

bạn có thể thử thay đổi "html" thành "văn bản" không? –

8

Tôi nghĩ rằng tôi đã bị nhầm lẫn với "loại" tham số trong .post của JQuery $ chỉ huy. Sau khi nói chuyện với một số người, có vẻ như kiểu trả về để gọi một WebMethod PHẢI là "json". Tôi đã cố gắng sử dụng "html". Một khi tôi thay đổi nó thành "json" và sau đó mọi thứ hoạt động như bình thường. Vì vậy, rõ ràng, một phương pháp được trang trí với [WebMethod] chỉ trả về JSON, và đó là nơi gác máy của tôi.

Cảm ơn các bạn đã trả lời.

+0

Vâng, điều này cũng khiến tôi cảm thấy tốt. Cảm ơn bạn đã biết! – Jagd

0

Tôi đã có cùng một vấn đề chính xác: WebMethod trả về toàn bộ trang HTML thay vì dữ liệu dự định. Đối với tôi, giải pháp xuất phát từ sự thay đổi bên trong ~/App_Start/RouteConfig.cs dòng sau:

settings.AutoRedirectMode = RedirectMode.Permanent; 

để

settings.AutoRedirectMode = RedirectMode.Off; 
Các vấn đề liên quan