Почему мой запрос post jQuery Ajax использует JSON?

#javascript #jquery #json

#javascript #jquery #json

Вопрос:

Я скачал некоторый код, и в нем был следующий фрагмент:

  function GetCommentBySessionIDWCF_JSON() {
            varType = "POST";
            varUrl = "service/CommentSessionIDWCFService.svc/GetCommentsByPost";
            varData = '{"SessionID": "'   '123'   '"}';
            varContentType = "application/json; charset=utf-8";
            varDataType = "json";
            varProcessData = true;

            //now to do the clever stuff
            $.ajax({
                type: varType, //GET or POST or PUT or DELETE verb
                url: varUrl, // Location of the service
                data: varData, //Data sent to server
                contentType: varContentType, // content type sent to server
                dataType: varDataType, //Expected data format from server
                processdata: varProcessData, //True or False
                success: function (data) {//On Successfull service call

                    $.each(data.GetCommentsByPostResult, function (e) {
                        alert(e.CommentText);
                    });

                },
                error: ServiceFailed// When Service call fails
            });
  

Мне интересно, почему я должен отправлять JSON с этим сообщением? Я прочитал документацию jQuery, и в ней говорится:

«Данные, которые должны быть отправлены на сервер. Он преобразуется в строку запроса, если уже не является строкой. Он добавляется к URL для GET-запросов. Смотрите параметр ProcessData, чтобы предотвратить эту автоматическую обработку. Объект должен быть парами ключ / значение. Если значение является массивом, jQuery сериализует несколько значений с одним и тем же ключом на основе значения традиционной настройки (описано ниже).»

Но когда я изменил JSON в ‘data’ на строку, я получаю ошибку 400. почему?

Комментарии:

1. Просто должна быть возможность по умолчанию использовать тип данных string, если вы удалите его из этого скрипта.

2. задайте тип данных в ваших параметрах ajax

Ответ №1:

Это не JSON, это объект, содержащий пары ключ / значение, который отображается в HTTP ?param=value для отправки на сервер.

Комментарии:

1. Только для запроса GET. он отправляет POST.

2. Принцип тот же, строка запроса просто не отображается в URL.

3. ах, я понимаю, так что мне интересно, является ли это стандартной практикой в сценарии post? Все ли сообщения состоят из пар ключ-значение?

4. Именно так вы отправляете данные в HTTP-запросах. ПОЛУЧИТЬ POST, ПОМЕСТИТЬ, УДАЛИТЬ, вы называете это. Все они используют один и тот же механизм.

5. круто, да, хорошо, все еще учусь, просто посмотрел на определение POST в Википедии, и да, это имеет смысл. Снова и снова Get it содержит только пары ключ-значение, которые имеют urlencoded…