JQuery AJAX с ASP.NET WebMethod, возвращающим всю страницу

Я делаю несколько простых тестов (в рамках подготовки к более крупному проекту) для вызова ASP.NET WebMethod с использованием JQuery AJAX. В моем примере мой WebMethod возвращает простую строку. Однако, когда я пытаюсь вызвать его с помощью JQuery, я получаю только содержимое HTML-страницы вместо моей строки. Что мне не хватает?

Сторона клиента:

$(document).ready(function ready() {
        $("#MyButton").click(function clicked(e) {
            $.post("Default.aspx/TestMethod",
                {name:"Bob"},
                function(msg) {
                    alert("Data Recieved: " + msg);
                },
                "html"
            );
        });
    });

Сторона сервера:

using System;
using System.Web.Services;

namespace JqueryAjaxText
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        [WebMethod]
        public static string TestMethod(string name)
        {
            return "The value submitted was " + name;
        }
    }
}

Ответ 1

Посмотрите эту ссылку. Я использовал некоторые из его других сообщений для успешного вызова службы WCF. Обязательно ознакомьтесь со статьями:

http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Прочитайте статью, но по существу:

  $("#Result").click(function() {
    $.ajax({
      type: "POST",
      url: "Default.aspx/GetDate",
      data: "{}",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function(msg) {
        $("#Result").text(msg.d);
      }
    });
});

Ответ 2

Я думаю, что меня путают с параметром "type" в команде JQuery $.post. Поговорив с некоторыми людьми, кажется, что тип возврата для вызова WebMethod ДОЛЖЕН быть "json". Я пытался использовать "html". Как только я изменил его на "json", а потом все работало нормально. Таким образом, по-видимому, метод, украшенный [WebMethod], возвращает только JSON, и там, где мое зависание было.

Спасибо за ваши ребята.

Ответ 3

Попробуйте изменить последний параметр "html" на "текст". Этот параметр указывает тип возвращаемых данных.

Ответ 4

У меня была точно такая же проблема: WebMethod вернул всю HTML-страницу вместо предполагаемых данных. Для меня решение было связано с изменением внутри ~/App_Start/RouteConfig.cs следующей строки:

settings.AutoRedirectMode = RedirectMode.Permanent;

к

settings.AutoRedirectMode = RedirectMode.Off;