2012-11-16 57 views
5

長時間的WinForm程序員在這裏,但新的Web編程場景。我有Visual Studio 2010,並創建了一個新的WebSite項目。 我似乎無法讓ajax調用我創建的webmethod。當我點擊頁面上的按鈕時,根本沒有任何反應。Web方法不是由jQuery的JavaScript函數調用

它看起來像jquery 1.4.1會自動添加到腳本文件夾中,當我創建一個WebSite項目。

Default.aspx中我加2個腳本標籤:

<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script> 
<script language="javascript" type="text/javascript" src="Scripts/Process.js"> 

我把一個按鈕在頁面上,其中的onclick功能在Process.js定義:

<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" /> 

過程中。 JS我有以下代碼:

function btnTest_onclick() { 

    var strData = JSON.stringify({ 
     userid: 5 
    }); 

    alert(strData); 

    $.ajax({ 
     url: 'Default.aspx/GetData', 
     type: "POST", 
     data: strData, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: Success, 
     failure: Failure, 
     async: true 
    }); 
} 

function Success(data) { 
    alert("success"); 
} 

function Failure(data) { 
    alert("failure"); 
} 

在Default.aspx.cs:

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

    } 

    [WebMethod()] 
    public static string GetData(int id) 
    { 
     return "hello, my id is " + id; 
    } 
} 
+0

你知道...你可以隨時'控制檯來獲取最新的穩定版本的jQuery(或使用UI做同樣的,甚至通過更換腳本做手工更新,包jquery'文件) – MilkyWayJoe

+1

也在[$ .ajax](http://api.jquery.com/jQuery.ajax/)中,正確的回調是'error'而不是'failure'。替換那個。 – MilkyWayJoe

+0

1.4.1不穩定?我想因爲MS似乎自動爲你包括它,我認爲它必須是穩定的。這有效地告訴我,它是失敗的,謝謝。現在我需要弄清楚爲什麼它失敗:) – user441521

回答

4

我不知道,如果使用jQuery是對你的要求做出Ajax請求,但你可以更輕鬆地做Ajax請求頁面方法使用ASP.NET AJAX的能力。

首先我想要注意的是,要使用PageMethods,您需要將腳本管理器控件添加到頁面並指定EnablePageMethods =「True」。

當您這樣做時,ScriptManager將呈現PageMethods客戶端定義,它代表頁面上定義的頁面方法的代理,並且您可以使用Ajax請求輕鬆調用此方法。

所以,你可以試試下面的代碼:

<asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="true" EnablePageMethods="True" /> 
<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" /> 
<script type="text/javascript"> 
    function btnTest_onclick() { 

     PageMethods.GetData(5, Success, Failure); 
    } 

    function Success(data) { 
     alert("success"); 
     alert(data); 
    } 

    function Failure(data) { 
     alert("failure"); 
    } 

</script> 

正如你可以看到這個代碼有較少的代碼行和它的作品。

+0

這確實奏效!所以這表明我的ajax調用已經搞亂了。我真的很想知道我做錯了什麼。你只能用這個函數來定義該頁面上定義的函數嗎?例如,如果我想創建一個基本上存在的頁面來存儲常用函數以供任何地方使用,那麼這個工作是否會存在於一個頁面中,而不是那個想要調用它的頁面呢?我看到的一個主要好處是,我可以通過「Default.aspx/GetData」使用ajax調用來指定函數駐留的頁面。我可以使用ScriptManage和PageMethods做到這一點嗎?如果是這樣,我更喜歡這種方法。 – user441521

+0

要在頁面之間共享一些代碼,最好使用支持Ajax的WCF或Web服務。 Dino Esposito的以下鏈接描述了這種方法:http://dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx。如果您將閱讀本文,那麼您會看到使用wcf服務的工作與使用頁面方法的工作相同。注意:您還可以通過wcf服務方法訪問會話,這些方法以文章中描述的方式實現。 –

+0

您也可以查看我對以下問題的回答:http://stackoverflow.com/questions/12886991/calling-wcf-server-from-asp-net/12992569#12992569 –

1

數據項目名稱必須匹配的頁面方法的參數:

var strData = JSON.stringify({ 
       id_MATCH: 5 
      }); 

    [WebMethod()] 
    public static string GetData(int id_MATCH) 
    { 
     return "hello, my id is " + id_MATCH; 
    } 
+0

我把它們都命名爲id,但仍然失敗。也沒有人知道如何阻止IE緩存的東西。我做了改變,reran和alert()仍然說userid。我刪除了臨時互聯網文件和reran,然後顯示id,但它煩惱不得不刪除臨時互聯網文件。 – user441521

+1

嘗試在測試之間停止開發服務器。右鍵單擊任務欄中的通知圖標並選擇停止。 –

+0

工作原理雖然大約相同的刪除臨時互聯網文件的點擊次數:/ – user441521

0

下面是Ajax的帖子和網頁的方法來處理

<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" /> 
<script type="text/javascript" > 
function btnTest_onclick() { 

var strData = JSON.stringify({ 
    userid: 5 
}); 

alert(strData); 

$.ajax({ 
    url: 'Default.aspx/GetData', 
    type: "POST", 
    data: strData, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: Success, 
    failure: Failure, 
    async: true 
}); 
} 

function Success(data) { 
alert("success"); 
} 

function Failure(data) { 
alert("failure"); 
}</script> 

[System.Web.Services.WebMethod()] 
    public static string GetData(int userid) 
    { 
     return "hello, my id is " + userid; 
    } 

能否請您檢查上面的代碼,其中從$就發送的數據名稱是一樣的,在的WebMethod。

感謝

相關問題