2010-05-04 51 views
5

我創造了我的網頁的代碼隱藏文件爲這樣一個WebMethod:ASP .NET:無法調用頁面的WebMethod使用jQuery

[System.Web.Services.WebMethod()] 
public static string Test() 
{ 
    return "TEST"; 
} 

我創建了下面的HTML頁面來測試一下:

<html> 
<head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"/></script> 
    <script type="text/javascript"> 
     function test() {    
      $.ajax({ 
       type: "POST", 
       url: "http://localhost/TestApp/TestPage.aspx/Test", 
       data: "{}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "text", 
       success: function(msg) { 
        alert(msg.d); 
       } 
      }); 
     } 
    </script> 
</head> 
<body> 
    <button onclick="test();">Click Me</button> 
</body> 
</html> 

當我點擊這個按鈕時,AJAX就會熄滅,但是沒有任何東西會被返回。當我調試我的代碼時,方法Test()甚至沒有被調用。有任何想法嗎?

回答

6

嘗試

url: "TestPage.aspx/Test" 

或任何相關的URL,將打擊你的頁面。

您可能無意中違反了same origin policy

此外,雖然你還沒有在那裏,但你期待一個d:包裝的對象。因爲它是你只是要獲得一個字符串。

這應該讓你到你想去的地方。

function test() {    
     $.ajax({ 
      type: "POST", 
      url: "TestPage.aspx/Test", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
       alert(msg.d); 
      } 
     }); 
    } 
+0

問題修復!感謝Code Poet和其他所有回答。它有兩方面:dataType是問題的一部分,所以我給每個人一個投票,誰回答了這個問題。最終,這歸結爲無意中違反了同一起源政策,這就是爲什麼我將此標記爲解決方案的原因。 再次感謝大家。欣賞它! – John 2010-05-05 19:22:44

+0

@John樂意幫忙。 – 2010-05-05 20:56:55

0

您需要設置測試()接受/允許POST

+0

- WebMethod是所有需要在服務器端。 – 2010-05-04 21:26:02

0

如果PageMethods正確的網頁上註冊,你應該能夠給他們打電話與Microsoft註冊的對象調用PageMethods。

您的JavaScript應該在aspx頁面載入所有Microsoft特定庫之後運行。當這些被加載時,你可以這樣稱呼你的PageMethod:

PageMethods.Test(function()OnSucceeded {},function()OnFailed {});

這裏是一個更好的例子鏈接:

http://www.junasoftware.com/blog/using-jquery-ajax-and-page-methods-with-a-asp.net-webservice.aspx

如果你沒有準備好,我強烈建議使用Firebug來幫助調試這些客戶端調用。 Firebug將爲您提供所需的全部信息,以確定真正發生的事情。

getfirebug.com

+0

-1並歡迎來到StackOverflow。這個問題具體表明jQuery正在使用中。 MsAjax不需要發佈到頁面方法。 – 2010-05-04 21:29:47

+0

好吧。這聽起來像他正在尋找一種方法來使它工作,我提供了一個替代方案。我同意MsAjax不是*必需的*來使它工作,但它可用並且可能是一個可行的選擇。這個問題明確表明jQuery正在使用中,但沒有說jQuery有何用處。 – Jeremy 2010-05-05 13:54:21

+0

對不起,傑里米。我應該更清楚,但是,它必須通過jQuery。儘管如果我決定在將來使用MsAjax路線,我一定會銘記在心。 – John 2010-05-05 19:24:03

1

我做了這個javascript函數使用jQuery調用的WebMethods:

function pageMethod(fn, params, successFn, errorFn) { 
    var pagePath = window.location.pathname; 

    var jsonData = $.toJSON(params); 

    $.ajax({ 
     type: "POST", 
     url: pagePath + "/" + fn, 
     contentType: "application/json; charset=utf-8", 
     data: jsonData, 
     dataType: "json", 
     success: successFn, 
     error: errorFn 
    }); 
} 

這$ .toJson系列化由jquery.json-1.3的插件來實現。

正如你所看到的,數據類型必須是「JSON」

+0

感謝分享!我將使用這個方便的小功能前進。 – John 2010-05-05 19:25:06

2

我認爲數據類型應該是「JSON」。添加一個錯誤函數,看看你回來了什麼錯誤狀態,即404沒有找到,500服務器錯誤等等

+0

良好的通話。謝謝! – John 2010-05-05 19:25:32

相關問題