Вызов метода на стороне сервера ASP.NET через jQuery
Я пытаюсь вызвать метод на стороне сервера с клиентской стороны через jQuery. Мой код выглядит следующим образом:
Серверная сторона:
using System.Web.Services; [WebMethod()] //[ScriptMethod()] public static void SendMessage(string subject, string message, string messageId, string pupilId) { //Send message }
Сторона клиента:
- Изменение префикса пространства имен XML по умолчанию, сгенерированного JAXWS
- Как использовать WSDL
- Могу ли я вернуть JSON из веб-службы .asmx, если ContentType не является JSON?
- Каковы различия между веб-службами WCF и ASMX?
- Лучший способ поддерживать данные «application / x-www-form-urlencoded» с WCF?
$("#btnSendMessage").live("click", function(){ var subject = $("#tbSubject").val(); var message = $("#tbMessage").val(); var messageId = $("#hdnMessageId").val(); var pupilId = $("#hdnPupilId").val(); $.ajax({ type: "POST", url: "./MessagePopup.aspx/SendMessage", data: ("subject=" + subject + "&message=" + message + "&messageId=" + messageId + "&pupilId=" + pupilId), error: function(XMLHttpRequest, textStatus, errorThrown){ alert(textStatus); }, success: function(result){ alert("success"); } }); return false; });
Я добавил точку останова на методе SendMessage на стороне сервера, но это никогда не ударяет, но когда я запускаю код, вызывается метод jQuery success. Что может быть причиной этого?
- Отчеты в SOA (Business Intelligence & Service Oriented Architecture)
- Сообщение jQuery ajax для веб-службы
- Весна: загрузка файла RESTFUL Web Service
- Как я могу динамически переключать адреса веб-сервисов в .NET без перекомпиляции?
- различия в приложении / json и application / x-www-form-urlencoded
- Запись в stream файлов, возвращенный из getResourceAsStream ()
- Заполнение DataSet или DataTable из набора результатов запроса LINQ
- Тестирование веб-сервисов REST
Чтобы вызвать ASP.NET AJAX «ScriptServices» и методы страницы, вам нужно использовать полный синтаксис $ .ajax ():
$.ajax({ type: "POST", url: "MessagePopup.aspx/SendMessage", data: "{subject:'" + subject + "',message:'" + message + ",messageId:'" + messageId + "',pupilId:'" + pupilId +"'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function(msg) { // Do something interesting here. } });
См. Это сообщение для получения подробной информации о том, почему это необходимо: http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/
Изменить: расширение не изменяется на .asmx, но остается .aspx.
Похоже, вы пытаетесь использовать метод страницы.
См. Здесь Методы страницы в ASP.NET Ajax для справки
Вы должны использовать веб-сервис вместо обычной веб-страницы aspx. Веб-страницы не поддерживают вызовы веб-методов, я считаю, что ваш запрос jQuery загружает HTML-страницу. Я предлагаю вам две вещи:
- Используйте Fiddler2 (с IE) или HttpFox (с Firefox) для отладки запросов и ответов AJAX на стороне клиента.
- Используйте веб-службу WCF на стороне сервера. в этом случае вы можете использовать SvcConfigEditor и SvcTraceViewer для настройки и отладки веб-методов на стороне сервера.
$.ajax({ type: "POST", url: "MessagePopup.aspx/SendMessage", data: "{subject:'" + subject + "',message:'" + message + ",messageId:'" + messageId + "',pupilId:'" + pupilId +"'}", async: true, cache: false, contentType: "application/json; charset=utf-8", dataType: "json", success: function() {}, error:function (xhr, ajaxOptions, thrownError){ alert(thrownError); } });
Если это не работает … и дает «Синтаксическая ошибка: синтаксическая ошибка» … затем добавьте это
между и
в файле Web.Config.
Надеюсь, это поможет кому-то, потому что мне потребовалось некоторое время, чтобы понять, что рядом с функцией jquery я должен добавить это в Web.Config.
Вот код, который может работать в вашей ситуации.
Есть пример, который всегда работает для меня.
Вот полная статья http://www.webdeveloperpost.com/Articles/How-to-use-jquery-ajax-in-asp-dot-net-web-page.aspx
Это хорошо работает для тех, кто хочет прямолинейный способ использования метода jquery asp.net call back