Ресурс интерпретируется как Документ, но передается с приложением MIME-типа / предупреждением json в Chrome Developer Tools - PullRequest
41 голосов
/ 04 августа 2011

У меня есть следующий фрагмент, который использует плагин 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 Developer Tools.Я хочу выяснить, почему предупреждение или, что еще лучше, способ его устранения.

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

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

Ответы [ 7 ]

20 голосов
/ 14 августа 2011

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

Со стороны сервера при возврате ответа JSON измените тип содержимого: text / html

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

10 голосов
/ 29 мая 2017

Этот тип предупреждений обычно помечается из-за HTTP-заголовков запроса.В частности, заголовок запроса Accept. В документации 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.

4 голосов
/ 30 сентября 2011

Это на самом деле изюминка в Chrome, а не библиотека JavaScript.Вот исправление:

Чтобы предотвратить появление сообщения, а также позволить chrome визуализировать ответ в виде 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);
2 голосов
/ 16 августа 2011

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

1 голос
/ 29 сентября 2013

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

0 голосов
/ 15 января 2013

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

0 голосов
/ 27 сентября 2012

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

...