Использование PageMethods с jQuery - PullRequest
3 голосов
/ 22 мая 2009

Проще говоря, я хочу вызвать общедоступные статические методы, украшенные атрибутом WebMethod внутри моего кода C-файла из jquery.ajax , чтобы получить json и другие простые вещи (в разных функциях). Но вместо этого я получаю целую страницу: '(

Я не использую asp.net AJAX, хотя я разрабатываю для платформы .NET 3.5 и использую VS 2008. (Есть некоторые ограничения со стороны клиента)

Пожалуйста, дайте мне знать, могу ли я использовать методы страницы с использованием asp.net ajax или если нет, то каково другое простое решение?

Ответы [ 4 ]

3 голосов
/ 08 июня 2009

После долгих размышлений я нашел проблему. Я использовал редактируемый плагин jquery . Это было источником проблемы. Когда jeditable вызывает ajax jquery, он устанавливает параметры ajax, например:

    var ajaxoptions = {
        type: 'POST',
        data: submitdata,
        url: settings.target,
        success: function(result, status) {
            if (ajaxoptions.dataType == 'html') {
                $(self).html(result);
            }
            self.editing = false;
            callback.apply(self, [result, settings]);
            if (!$.trim($(self).html())) {
                $(self).html(settings.placeholder);
            }
        },
        error: function(xhr, status, error) {
            onerror.apply(form, [settings, self, xhr]);
        }
    };

так что он отправлял вещи просто html , и чтобы использовать это с методами страницы, нам нужно настроить вещи так, чтобы они отправляли как json . Поэтому нам нужно добавить что-то в настройки, например:

    var ajaxoptions = {
        type: 'POST',
        data: submitdata,
        url: settings.target,
        dataType: 'json', //Data Type
        contentType: 'application/json; charset=utf-8', //Content Type
       //....other settings
    };

Таким образом, я установил два новых свойства в настройках dataType и contentType и изменил выше это:

    var ajaxoptions = {
        type: 'POST',
        data: submitdata,
        url: settings.target,
        dataType: settings.dataType,
        contentType: settings.contentType,
       //....other settings
    };

Теперь возникла еще одна проблема :( она отправляла данные (из submitdata property) как обычную строку запроса, которую asp.net не принимает с json запросами. Поэтому мне пришлось используйте плагин json jquery и измените способ отправки данных в ajax с помощью следующего теста dataType:

    if (settings.dataType == "json") {
        if ($.toJSON) {
            submitdata = $.toJSON(submitdata); 
        }
    }

и работает как на ветер !!!

1 голос
/ 22 мая 2009

Russ Cam опубликовал эту ссылку в ответе на другой вопрос (так что, если это поможет, поднимите свой голос;)):

Использование jQuery для непосредственного вызова ASP.NET AJAX Page Methods

1 голос
/ 23 мая 2009

Дейв Уорд имеет серию сообщений , которые используют jQuery напрямую с ASP.Net PageMethods, не требуется MS Ajax UpdatePanel В частности, этот пост поможет вам начать.

1 голос
/ 22 мая 2009

Я не уверен, но я думаю, что WebMethods доступны только через asp.net AJAX. Хотя я могу ошибаться, потому что мы не используем это таким образом. Мы делаем это немного по-другому.

Мы создали страницу aspx, которая принимает все наши запросы AJAX и передает их последующим методам.

Код серверной стороны

If Not (Request("method") Is Nothing) Then
            method = Request("method")
            username = HttpContext.Current.User.Identity.Name.ToString
            Select Case UCase(method)
                Case "GETPROJECTS"
                    Response.ContentType = "text/json"
                    Response.Write(GetProjects(Request("cid"), Request("status")))
                    Exit Select
        end select
end if

Код на стороне клиента [с использованием jquery]

$.ajaxSetup({
        error: function(xhr, msg) { alert(xhr, msg) },
        type: "POST",
        url: "Ajax.aspx",
    beforeSend: function() { showLoader(el); },
        data: { method: 'GetProjects', cid: "2", status:"open"},
        success: function(msg) {
            var data = JSON.parse(msg);
            alert(data.Message);
        },
        complete: function() { hideLoader(el);  }
    });

Надеюсь, это поможет.

...