Использование JQuery для вызова WebMethod
У меня возникли проблемы с попаданием в мой поисковый WebMethod из моего вызова JQuery. Может быть, кто-нибудь поможет мне выбрать правильное направление.
Я также упаковал все в zip-файл, чтобы кто-то захотел проверить его для более близкого просмотра.
Http://www.filedropper.com/jsonexample
Спасибо Райан
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>JSON Example</title>
<script type="text/javascript" language="JavaScript" src="jquery-1.3.1.min.js"></script>
<script type="text/javascript" language="javascript">
function Search() {
var search = $("#searchbox").val();
var options = {
type: "POST",
url: "Default.aspx/Search",
data: "{text:" + search + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert('Success!');
}
};
$.ajax(options);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<input type="text" id="searchbox" size="40" />
<a href="#" onclick="Search()" id="goSearch">Search</a>
<br />
<div id="Load" />
</form>
</body>
</html>
И вот код, стоящий за значением по умолчанию.aspx
Imports System.Data
Imports System.Web.Services
Imports System.Web.Script.Serialization
Partial Class _Default
Inherits System.Web.UI.Page
<WebMethod()> _
Public Shared Function Search(ByVal text As String) As IEnumerable
Return "test"
End Function
End Class
2 ответа:
Чтобы решить такую проблему, первое, что нужно сделать, это посмотреть ее в Firebug.
Если вы нажмете ссылку "Поиск" и посмотрите POST-запрос/ответ в консоли Firebug, вы увидите, что он выдает ошибку 500 server: Invalid JSON Primitive.
Причина этого заключается в том, что идентификаторы ключа/значения в вашем литерале JSON "data" не заключены в кавычки. Строка 17 должна быть:
data: "{'text':'" + search + "'}",
Тогда все будет работать, как и ожидалось.
Примечание: предлагаемые данные { тест: поиск } будет не работать. Если вы предоставите jQuery фактический литерал JSON вместо строки, он преобразует его в пару ключ/значение test=search и опубликует это вместо JSON. Это также вызовет ASP.NET AJAX ScriptService или PageMethod, чтобы бросить недопустимую ошибку примитива JSON.
Вам нужно сделать следующее (C#):
- WebMethod должен быть
public static
- он должен быть украшен атрибутом
[WebMethod]
- Вам нужен ScriptManager на вашем .aspx Страница
- Установите ScriptManager
EnablePageMethods="true"
А вот пример javascript:
$().ready(function() { $(yourDropDownList).change(LoadValues); }); function LoadValues() { PageMethods.YourMethod(arg1, CallSuccess, CallFailed); } function CallFailed(result) { alert('AJAX Error:' + result.get_message()); } function CallSuccess(result) { //do whatever you need with the result }