2012-04-12 15 views
5

Có thể gọi phương thức được gán cho [WebMethod] từ javascript trên một trang khác không? I E. sử dụng các cuộc gọi ajax jquery sau từ kịch bản trên một trang gọi là PageTwo.aspx:Gọi phương thức web của trang từ javascript trên một trang khác

$.ajax(
     { 
      type: "POST", 
      url: "pageone.aspx/PageOneMethodOne", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) 
        { 
         //something 
        } 
     } 
    ); 

PageOne.aspx.cs chứa

[WebMethod] 
    public string PageOneMethodOne() 
    { 
     return "hello world"; 
    } 
+0

Tôi nghĩ \ bạn có thể miễn là bạn chỉ định đúng url cho nó –

Trả lời

8

này là có thể, miễn là bạn chỉ định URL chính xác. Kiểm tra các hình thức sau đây:

<form id="form1" runat="server"> 
<div> 
    <div id="messages"> 
    </div> 
    <input type="text" id="echo" /><input id="echoSubmit" value="Echo!" type="button"/> 
</div> 

và nó tương ứng với Javascript:

<script type="text/javascript"> 
    $(function() { 
     $('#echoSubmit').click(function() { 
      var mes = $('#echo').val(); 
      var jsonText = JSON.stringify({ message: mes }); 

      $.ajax({ 
       type: "POST", 
       url: "SampleForm.aspx/SendMessage", 
       data: jsonText, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (msg) { 
        $("#messages").append(msg.d); 
       } 
      }); 
     }); 
    }); 
</script> 

Nhấp vào nút echoSumbit sẽ gửi nội dung của hộp đầu vào cho một WebMethod trên một điều khiển, SampleForm.aspx. Đây là mã phía sau của biểu mẫu đó:

public partial class SampleForm : System.Web.UI.Page 
{ 
    [WebMethod] 
    public static string SendMessage(string message) 
    { 
     return message; 
    } 
} 

Trình xử lý nhấp chuột trong Chat.aspx gửi giá trị đầu vào đến SampleForm.aspx.cs, trả về giá trị đã gửi. Giá trị trả về được thêm vào một div trong Chat.aspx trong phương thức thành công của cuộc gọi .ajax.

+0

cảm ơn @njebert, bạn có thể cho tôi biết, phương pháp trên trang có phải là tĩnh không? – hofnarwillie

+1

Bạn có thể sử dụng một .asmx thay vì mã-đằng sau để gọi một phương thức không tĩnh - http://stackoverflow.com/questions/1360253/call-non-static-method-in-server-sideaspx-cs-from -client-side-sử dụng-javascript – njebert