Способен ли jquery метод post () вызывать веб-метод asp.net 3.5? - PullRequest
5 голосов
/ 11 января 2012

Вот некоторый javascript:

$.ajax({
        type: "POST",
        url: "default.aspx/GetDate",
        contentType: "application/json; charset=utf-8",
        data: {},
        dataType: "json",
        success: function(result) {
            alert(result.d);
        }
     });

Вышеуказанный метод работает, как я ожидал, и предупреждает строку, возвращенную из [WebMethod] с именем GetDate в default.aspx

Но когда я использую:

$.post(
        "default.aspx/GetDate",
        {},
        function(result) {
            alert(result.d);
        },
        "json"
     );

Предупреждение в этом методе успеха никогда не срабатывает.

В firebug я вижу, что POST в основном сработал - он возвращает 200 OK
Но ответ в этом случаеэто HTML-код всей страницы default.aspx, а не JSON, возвращаемый при использовании метода $ .ajax ().

EDIT:
Заголовки ответа и запроса, показанные в firebug, НЕ идентичны.

С $ .ajax () ...

REQUEST:
Accept  application/json, text/javascript, */*; q=0.01
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding gzip, deflate
Accept-Language en-gb,en;q=0.5
Connection  keep-alive
Content-Type    application/json; charset=utf-8
Cookie  (removed)
Host    (removed)
Referer (removed)
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
X-Requested-With    XMLHttpRequest

RESPONSE:
Cache-Control   private, max-age=0
Content-Length  27
Content-Type    application/json; charset=utf-8
Date    Wed, 11 Jan 2012 12:36:56 GMT
Server  Microsoft-IIS/7.5
X-Powered-By    ASP.NET

С $ .post () ...

REQUEST:
Accept  application/json, text/javascript, */*; q=0.01
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding gzip, deflate
Accept-Language en-gb,en;q=0.5
Connection  keep-alive
Cookie  (removed)
Host    (removed)
Referer (removed)
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
X-Requested-With    XMLHttpRequest

RESPONSE:
Cache-Control   private
Content-Length  13815
Content-Type    text/html; charset=utf-8
Date    Wed, 11 Jan 2012 12:36:53 GMT
Server  Microsoft-IIS/7.5
X-AspNet-Version    2.0.50727
X-Powered-By    ASP.NET

Могу ли я использовать $ .post() для этого или мне нужно использовать метод $ .ajax ()?

Ответы [ 2 ]

3 голосов
/ 11 января 2012

Полагаю, это потому, что ваш серверный код требует установки заголовка Content-Type.Реализация по умолчанию $.post не позволяет этого.

Если, однако, каждый раз, когда вы используете AJAX в своем приложении, вам нужен этот заголовок, вы можете изменить $.post:

$.post = function (url, data, callback, type) {
    if (jQuery.isFunction(data)) {
        type = type || callback;
        callback = data;
        data = undefined;
    }

    return jQuery.ajax({
        type: 'POST',
        url: url,
        data: data,
        success: callback,
        dataType: type
        contentType: "application/json; charset=utf-8"
    });
};

При этом для всех $.post вызовов будет установлено contentType.Это может быть хорошей идеей;это не может ...

3 голосов
/ 11 января 2012

Это нормально.Когда вы используете $.post, вы не можете установить contentType: 'application/json', как вы используете $.ajax.И сервер ожидает этот заголовок.Поэтому в принципе вы не можете вызвать метод страницы ASP.NET с $.post.

...