Подтвердить что ты не робот

Ресурс, интерпретируемый как Документ, но переносимый с помощью приложения MIME-типа/json-предупреждение в Инструменты разработчика Chrome

У меня есть следующий фрагмент, который использует плагин jQuery Form для отправки формы на сервер (в ajax).

  var options = {
    dataType: "json",
    success: function(data) { 
      alert("success");
    } 
  }; 

  $form.ajaxSubmit(options);

Форма:

<form enctype="multipart/form-data" id="name_change_form" method="post" action="/my_account/"> 
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='6c9b552aaba88b8442077e2957e69303' /></div> 
  <table> 
    <tr> 
      <td> 
        <label for="id_first_name">First name</label>:
      </td> 
      <td> 
        <input name="first_name" value="Patrick" maxlength="30" type="text" id="id_first_name" size="30" /> 
      </td> 
    </tr> 
    <tr> 
      <td> 
        <label for="id_last_name">Last name</label>:
      </td> 
      <td> 
        <input name="last_name" value="Sung" maxlength="30" type="text" id="id_last_name" size="30" /> 
      </td> 
    </tr> 
  </table> 
  <input type="hidden" name="form_id" value="name_change_form" /> 
</form> 

Реализация ajax работает нормально. Но я получаю предупреждение

Ресурс, интерпретируемый как Документ, но переданный с помощью приложения типа MIME/json

в инструментах разработчика Chrome. Я хочу узнать, почему предупреждение или, что еще лучше, способ его решения.

Я изменил, чтобы использовать $.post вместо этого, и магически ошибка исчезла с тех пор. Я понятия не имею, почему $.post работает, но не $form.ajaxSubmit. Если кто-то может предложить свое объяснение, это было бы здорово. По крайней мере, эта проблема решена. Ниже приведен новый код.

var url = $form.attr("action");
$.post(
  url, 
  $form.serialize(), 
  function(data) {
    alert("success");
  },
  "json"
); 
4b9b3361

Ответ 1

Я использовал другой подход. Я переключился на использование $.post, и с тех пор ошибка исчезла.

Ответ 2

Я столкнулся с той же ошибкой. Решение, которое сработало для меня, это:

С конца сервера, возвращая ответ JSON, измените тип content: text/html

Теперь браузеры (Chrome, Firefox и IE8) не выдают ошибку.

Ответ 3

На самом деле это причуда в Chrome, а не в библиотеке JavaScript. Здесь исправление:

Чтобы предотвратить появление сообщения, а также разрешить хром отображать ответ как JSON в консоли, добавьте строку запроса в URL-адрес вашего запроса.

например

var xhr_object = new XMLHttpRequest();

var url = 'mysite.com/'; // Using this one, Chrome throws error

var url = 'mysite.com/?'; // Using this one, Chrome works

xhr_object.open('POST', url, false);

Ответ 4

Этот тип предупреждений обычно помечен из-за HTTP-заголовков запроса. В частности, заголовок запроса принятия. Документация MDN для заголовков HTTP

The Accept request HTTP header advertises which content types, expressed as MIME types, the client is able to understand. Using content negotiation, the server then selects one of the proposals, uses it and informs the client of its choice with the Content-Type response header. Browsers set adequate values for this header depending of the context where the request is done....

application/json, вероятно, не входит в список типов MIME в заголовке Accept, отправленном браузером, следовательно, это предупреждение.

Решение

Пользовательские заголовки HTTP могут быть отправлены программно только через XMLHttpRequest или любую из оболочек библиотеки js, реализующих его.

Ответ 5

Это случилось со мной, и как только я удалил это: enctype = "multipart/form-data" Он начал работать без предупреждения

Ответ 6

вы можете просто использовать JSON.stringify(options) преобразовать объект JSON в строку перед отправкой, затем предупредить об увольнении и отлично работать

Ответ 7

Используйте dataType: "jsonp". Раньше у меня была такая же ошибка. Это исправлено для меня.