2011-08-03 13 views
20

Ustawiłem punkt przerwania w następującej WebMethod, ale nigdy nie trafię w punkt przerwania.Wywołanie metody "WebMethod" za pomocą jQuery w programie ASP.NET WebForms

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> 

Odpowiedz

24

Upewnij się, że masz włączone metod strony w ScriptManager element:

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

i że anulowałeś domyślną akcję przycisku, zwracając wartość false wewnątrz obsługi onclick, w przeciwnym razie strona wykonuje pełny odświeżenie, a twoje wywołanie AJAX może nigdy nie mieć czasu do zakończenia. Oto pełny przykład roboczych:

<%@ 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> 

Inną możliwością jest, aby zapisać się do obsługi click dyskretnie:

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

a następnie wewnątrz osobnym pliku 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; 
}); 

Można również zauważyć, użycie właściwości msg.d wewnątrz odwołania zwrotnego sukcesu, którego program ASP.NET używa do zawijania całej odpowiedzi, jak również użycia ResolveUrl metoda służąca do prawidłowego wygenerowania adresu URL do metody strony, zamiast kodowania go na stałe.

+4

hmmm ... darins nieco źle ... nie ma potrzeby korzystania ScriptManager w ogóle. także zestaw znaków jest zbędny, a więc jest typ: json :) – naveen

+0

Dzięki temu adres url był błędny, używając '<% = ResolveUrl ("~/default.aspx/search")%>' – marknery

+0

Ustawiłem to samo, ale moja odpowiedź jest niezdefiniowany. Każdy pomysł, dlaczego?W konsoli pojawia się następujący błąd: 'Nie udało się załadować zasobu: serwer odpowiedział statusem 500 (Wewnętrzny błąd serwera)' – Si8

4

bardziej zoptymalizowanej wezwanie będzie

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); 
     } 
    }); 
} 

Nie ma potrzeby, aby zapewnić asp:ScriptManager w ogóle.

zasobów: http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

+3

Wygląda na to, że Chrome nie podoba się temu łączu z powodu podejrzewanego złośliwego oprogramowania, ale nie chcę go usuwać od kiedy tego nie opublikowałem. https://www.virustotal.com/en/url/ba8f2c409307ec010ef80629f518aabb85e846e88881a113ba7c2d4259d62cfe/analysis/1485793115/ – KSib

0

Aktualna przycisku powoduje pełne odświeżenie strony. Po prostu dodaj przycisk "=" do przycisku, aby tego uniknąć.

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

-Shazzam yo

0

Jak wdrożyć metody ASP.NET sieci Web przy użyciu jQuery AJAX?

HTML strony:

<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> 

Kod za:

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

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

Powiązane problemy