2011-08-03 85 views
20

我在下面的WebMethod中設置了一個斷點,但我從來沒有打過斷點。在ASP.NET WebForms中使用jQuery調用'WebMethod'

CS:

[WebMethod] 
public static string search() 
{ 
    return "worked"; 
} 

ASPX:

function search() { 
    $.ajax({ 
     type: "POST", 
     url: "ProcessAudit/req_brws.aspx/search", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      alert(msg) 
     } 
    }); 
} 
<button id = "btnSearch" onclick = "search()" >Search</button> 

回答

24

確保您已在ScriptManager元素啓用頁面方法:

<asp:ScriptManager ID="scm" runat="server" EnablePageMethods="true" /> 

並且您已通過在onclick處理程序中返回false取消了該按鈕的默認操作,否則該頁面將執行完整回發並且您的AJAX調用可能永遠沒有時間完成。這是一個完整的工作示例:

<%@ Page Language="C#" %> 
<script type="text/c#" runat="server"> 
[System.Web.Services.WebMethod] 
public static string search() 
{ 
    return "worked"; 
} 
</script> 

<!DOCTYPE html> 
<html> 
<head id="Head1" runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="Form1" runat="server"> 
     <asp:ScriptManager ID="scm" runat="server" EnablePageMethods="true" /> 
     <button id="btnSearch" onclick="search(); return false;" >Search</button> 
    </form> 

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
    <script type="text/javascript"> 
     function search() { 
      $.ajax({ 
       type: 'POST', 
       url: '<%= ResolveUrl("~/default.aspx/search") %>', 
       data: '{ }', 
       contentType: 'application/json; charset=utf-8', 
       dataType: 'json', 
       success: function (msg) { 
        alert(msg.d) 
       } 
      }); 
     } 
    </script> 
</body> 
</html> 

另一種可能性是訂閱點擊處理程序悄悄地:

<button id="btnSearch">Search</button> 

,然後一個單獨的JavaScript文件中:

$('#btnSearch').click(function() { 
    $.ajax({ 
     type: 'POST', 
     url: '<%= ResolveUrl("~/default.aspx/search") %>', 
     data: '{ }', 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 
     success: function (msg) { 
      alert(msg.d) 
     } 
    }); 
    return false; 
}); 

您可能還注意到在ASP.NET用來包裝整個響應的成功回調中的msg.d屬性的用法以及使用ResolveUrl方法來正確生成網頁的網頁方法,而不是硬編碼。

+4

嗯... darins稍有不妥......沒有必要使用的ScriptManager的。也charset是不必要的,所以是數據類型:json :) – naveen

+0

感謝網址是錯誤的,使用'<%= ResolveUrl(「〜/ default.aspx/search」)%>' – marknery

+0

我設置了相同的方式,但我的迴應是未定義。任何想法爲什麼?我的控制檯中出現以下錯誤:'無法加載資源:服務器響應狀態爲500(內部服務器錯誤)' – Si8

4

更優化的通話將被

function search() { 
    $.ajax({ 
     type: "POST", 
     url: '<%= ResolveUrl("~/ProcessAudit/req_brws.aspx/search") %>', 
     data: "{}", 
     contentType: "application/json", 
     success: function (msg) { 
      msg = msg.hasOwnProperty("d") ? msg.d : msg; 
      alert(msg); 
     } 
    }); 
} 

無需提供asp:ScriptManager可言。

資源:http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

+3

由於涉嫌惡意軟件,Chrome似乎不喜歡此鏈接,但我不想刪除因爲我沒有發佈這個。 https://www.virustotal.com/en/url/ba8f2c409307ec010ef80629f518aabb85e846e88881a113ba7c2d4259d62cfe/analysis/1485793115/ – KSib

0

您當前的按鈕,導致完全回發。 只需在你的按鈕上添加一個type =「button」來避免這種情況。

<button id = "btnSearch" type="button" onclick = "search()" >Search</button> 

-Shazzam喲

0

如何使用JQuery AJAX實現ASP.Net Web方法?

HTML頁:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 

    <title></title> 
    <script src="js/jquery.min.js"></script> 
    <script> 
     function SubmitData() { 

      var name = 'Ram'; 
      var gender = 'Male'; 
      var age = '30';   

      $.ajax({ 
       type: "POST", 
       url: "ajaxcall.aspx/SaveData", 
       data: '{"name":"' + name + '", "gender":"' + gender + '", "age":"' + age + '"}', 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       beforeSend: function() { 
        $('#loader').show(); 
       }, 
       success: function (data) { 

        alert(data.d); 
        $('#loader').hide(); 
       }, 
       error: function (msg) { 
        //alert('3'); 
        msg = "There is an error"; 
        alert(msg); 
        $('#loader').hide(); 
       } 
      }); 

     } 
    </script> 
</head> 
<body> 
    <div id="loader" style="display: none;"> 
     <img src="ajax-loader.gif" /> 
    </div> 
    <a href="#" onclick="SubmitData();">Submit</a> 
</body> 
</html> 

後面的代碼:

[WebMethod] 
    public static string SaveData(string name, string gender, string age) { 
    try { 
     return "OK"; 
    } catch (Exception ex) { 
     return ex.Message; 
    } finally { } 
} 

資源: http://www.sharepointcafe.net/2016/10/how-to-call-aspnet-web-method-using-jquery-ajax.html

相關問題