2012-01-23 73 views
5

我正在嘗試使用.aspx頁面中的方法來服務AJAX請求。出於某種原因,我沒有收到我想要的數據。有人可以告訴我我做錯了什麼嗎?在ASPX中使用webmethod服務AJAX請求頁面

mypage.aspx:

<%@ Page Language="VB" Title="My Page" %> 
<%@ Import Namespace="System.Web.Services" %> 
<%@ Import Namespace="System.Collections.Generic" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<script runat="server"> 

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) 

    End Sub 

    <WebMethod()> Public Function testmethod() As Integer 
     Return 5 
    End Function 

</script> 

<html> 
<!--...rest of page including mybutton and myresults--> 

JQuery的:

$("#mybutton").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "mypage.aspx/testmethod", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
     alert("success"); 
     $("#myresults").html(msg.d); 
     }, 
     error: function(msg) { 
     alert("error:" + JSON.stringify(msg)); 
     } 
    }); 
}); 

當我點擊mybutton我得到一個警告 「錯誤:」 該說,然後一大堆的HTML:

Unknown web method testmethod. 
Parameter name: methodName 

回答

12

的方法必須是Shared

<WebMethod()> Public Shared Function testmethod() As Integer 
    Return 5 
End Function 

而且,我不知道,當你不使用代碼隱藏文件頁面方法的支持。

+0

謝謝,這解決了這個問題。 – Flash

+2

添加 - 在C#中 - 它需要是'static' – Lijo

0

正在傳回的錯誤是什麼?你看到整個html頁面的原因是因爲你在代碼中有一個錯誤,而傳回的msg是完整的html,它告訴你錯誤在哪裏。我相信如果你解決了這個錯誤,那麼你會沒事的。

我不確定您是否期望從代碼隱藏中看到錯誤消息。請記住 - 在Ajax部分中調用的成功或錯誤函數將根據webservice方法是否成功調用而被調用。我認爲你認爲你會在這裏看到來自webmethod的錯誤信息,但事實上,如果webmethod拋出錯誤,那麼你仍然會有一個成功的Ajax調用,因此「成功」功能將是一個正在運行的功能。只有當整個webmethod調用失敗時纔會運行「error」函數,所以服務器沒有響應。

希望是有道理的。

+0

謝謝我發佈後意識到這一點,我在問題的底部包含了錯誤信息。 – Flash