2011-08-03 31 views
20

私は以下のWebMethodにブレークポイントを設定しましたが、私はブレークポイントを打つことはありません。ASP.NET Webフォームで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がResolveUrlの使用法だけでなく応答全体をラップするために使用するsuccessコールバック内のmsg.dプロパティの使用メソッドを使用して、ハードコーディングする代わりにpageメソッドへのurlを適切に生成します。

+4

なるほど...少し間違っdarins ...まったくのScriptManagerを使用する必要はありません。また、charsetは不要で、データ型もそうです:json :) – naveen

+0

URLは間違っていました。 '<%= 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

マルウェアの疑いがあるため、このリンクが気に入らないようですが、削除したくありません私はこれを投稿していないのでそれ以来。 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

関連する問題