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