JQuery - Как сделать $ .post (), используют contentType=application/json?

Я заметил, что при использовании $ .post () в jQuery, что значение по умолчанию contentType является application/x-www-form-urlencoded - когда мой asp.net mvc код должен иметь contentType=application/json

(См. этот вопрос для того, почему я должен использовать application/json: ASPNET MVC - Почему ModelState. Ложь IsValid "X поле требуется", когда то поле действительно имеет значение?)

Как я могу сделать $ .post (), отправляют contentType=application/json? У меня уже есть большое количество $ .post () функции, таким образом, я не хочу изменяться на $ .ajax (), потому что потребовалось бы слишком много времени

Если я пробую

$.post(url, data, function(), "json") 

Это все еще имеет contentType=application/x-www-form-urlencoded. Таким образом, что точно "json" параметрический усилитель делает, если он не изменяет contenttype на json?

Если я пробую

$.ajaxSetup({
  contentType: "application/json; charset=utf-8"
});

Это работает, но влияет на каждый $ .get и $ .post, что я имею, и заставляет некоторых повреждаться.

Так есть ли некоторый способ, которым я могу изменить поведение $ .post () для отправки contentType=application/json?

290
задан JK. 17 August 2017 в 11:28
поделиться

5 ответов

Думаю, вам придется

1.Изменить исходники, чтобы $.post всегда использовал тип данных JSON, поскольку это просто ярлык для предварительно настроенного вызова $.ajax

Или

2. Определите свою собственную функцию, которая является ярлыком для $.ajax конфигурации, которую вы хотите использовать

Или

3.Вы можете перезаписать $.post функцию своей собственной реализацией с помощью обезьяньего патча.

Тип данных JSON в вашем примере относится к типу данных, возвращаемому с сервера, а не к формату отправляемому на сервер.

67
ответ дан 23 November 2019 в 01:43
поделиться

Тип данных «json», который вы можете передать в качестве последнего параметра функции post (), указывает, какой тип данных функция ожидает в ответе сервера, а не тип данных, которые она отправляет в запросе. В частности, он устанавливает заголовок «Принять».

Честно говоря, лучше всего переключиться на вызов ajax (). Функция post () предназначена для удобства; упрощенная версия вызова ajax () для случаев, когда вы просто проводите простую публикацию формы. Ты не такой.

Если вы действительно не хотите переключаться, вы можете создать свою собственную функцию, например, xpost (), и попросить ее просто преобразовать заданные параметры в параметры для вызова jQuery ajax () с типом содержимого установленный. Таким образом, вместо того, чтобы переписывать все эти функции post () в функции ajax (), вам просто нужно изменить их все с post на xpost (или что-то еще).

8
ответ дан 23 November 2019 в 01:43
поделиться

используйте только

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

ОБНОВЛЕННОЕ @JK: Если вы напишете в своем вопросе только один пример кода с $ .post, вы найдете один соответствующий пример в ответе. Я не хочу повторять ту же информацию, которую вы уже изучили, пока не знаете: $ .post и $ .get - это короткие формы $ .ajax. Так что просто используйте $ .ajax, и вы сможете использовать полный набор его параметров без изменения каких-либо глобальных настроек.

Кстати, я бы не рекомендовал перезаписывать стандартный $ .post. Это мое личное мнение , но для меня важно не только то, что программа работает, но и то, что все, кто читает вашу программу, одинаково понимают ее. Перезапись стандартных методов без очень важной причины может привести к недоразумению при чтении программного кода. Поэтому я повторяю свою рекомендацию еще раз: просто используйте исходную форму $ .ajax jQuery вместо jQuery.get и jQuery.post , и вы получите программы, которые не только отлично работают, но и могут быть прочитаны людьми без каких-либо недоразумений.

20
ответ дан 23 November 2019 в 01:43
поделиться
$.ajax({
  url:url,
  type:"POST",
  data:data,
  contentType:"application/json; charset=utf-8",
  dataType:"json",
  success: function(){
    ...
  }
})

См .: jQuery.ajax ()

376
ответ дан 23 November 2019 в 01:43
поделиться

Вы не можете отправить application/json напрямую - он должен быть параметром GET/POST запроса.

Так что что-то вроде

$.post(url, {json: "...json..."}, function());
-19
ответ дан 23 November 2019 в 01:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: