JQuery AJAX POST вызов - параметры не включены - PullRequest
2 голосов
/ 02 ноября 2011

Когда я запускаю ajax-запрос типа «POST», параметры не включаются в строку.

Этот код:

    $telerik.$.ajaxSetup({
        accepts: 'application/json, text/javascript, */*'
    });

    var parameters = {
        "playerId": args.playerId
    };

    var ajaxCallParameters = {
    async: true,
    cache: false,
    url: "../Services/CmsWebService.svc/SendUpdateRequestToPlayer",
    type: "POST",
    data: parameters,
    dataType: 'json',
    error: function (jqXHR, textStatus, errorThrown) {
        var errorString = 'Error thrown from ajax call: ' + textStatus + 'Error: ' + errorThrown;
        var displayPanel = document.getElementById('requestStatusUpdateResults');
        $telerik.$(displayPanel).text(errorString);

    },
    success: function (data, textStatus, jqXHR) {
        var displayPanel = document.getElementById('requestStatusUpdateResults');
        $telerik.$(displayPanel).text(data.d);
    }
    };

    $telerik.$.ajax(ajaxCallParameters);

Запускает этот запрос (просматривается в Fiddler)

POST /Web/Services/CmsWebService.svc/SendUpdateRequestToPlayer HTTP/1.1

Как видите, параметр не включен.

Если я просто поменяю слово "POST" на "GET" в коде, то это запрос:

GET /Web/Services/CmsWebService.svc/SendUpdateRequestToPlayer?playerId=1&_=1320213556288 HTTP/1.1

Что происходит?Что такое POST, который останавливает включение параметров запроса?

Ответы [ 2 ]

4 голосов
/ 02 ноября 2011

HTTP POST ведет себя иначе, чем GET. Когда вы используете HTTP GET, он отправляет параметры как часть строки запроса URL, поэтому вы видите их добавленными. Однако при использовании HTTP POST параметры отправляются как часть тела HTTP, и поэтому они не добавляются в URL.

Причиной использования POST вместо GET является то, что параметры GET имеют ограничение размера в некоторых браузерах, тогда как вы можете иметь параметры практически любой длины при отправке через POST.

В зависимости от того, какая технология внутреннего сервера используется, сервер может обрабатывать параметры GET и параметры POST одинаковыми, и, следовательно, ваш внутренний сервер будет обрабатывать один штраф. Тем не менее, во многих случаях вы должны специально кодировать свой бэкэнд-сервис для принятия параметров через GET & POST.

0 голосов
/ 02 ноября 2011

Fidller не показывает переменные POST.Вы можете увидеть эти переменные, затем нажать на URL, а затем на «Инспекторы»> WebForms

Если все еще не работает, попробуйте следующее:

var parameters = {
    "playerId": args.playerId
};
$.post("../Services/CmsWebService.svc/SendUpdateRequestToPlayer",parameters),function(data) {
      $("#requestStatusUpdateResults").text(data.d);
},'json");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...