Что браузеры хотят для заголовка Content-Type в ответах json ajax? - PullRequest
8 голосов
/ 09 июня 2010

Я возвращаю json, который должен быть обработан javascript в качестве ответа на XMLHTTPRequest.

Если я установлю тип содержимого ответа «text / plain», все браузеры, кроме Chrome, примут его и без проблем передадут его моему JS. Тем не менее, Chrome обернет ответ в

<pre style="word-wrap: break-word; white-space: pre-wrap;"> 

, прежде чем передать его моему javascript.

Если я установлю тип содержимого ответа на «правильное» «application / json», то все браузеры, но Firefox примет его и передаст его моему JS без проблем. Firefox, однако, попросит сохранить или открыть ответ в виде файла.

Какой правильный кросс-браузерный Content-Type?

Ответы [ 2 ]

7 голосов
/ 30 сентября 2010

Вы можете решить эту проблему, проанализировав ответ в объект JSON, используя функцию jQuery parseJSON - http://api.jquery.com/jQuery.parseJSON/

Параметр, передаваемый в функцию, - это строка объекта JSON, которую вы извлекаете из ответаdata:

function AjaxResponse (data) {  // AJAX post callback 
  var jsonResult = $.parseJSON(data.substring(data.indexOf("{"), data.lastIndexOf("}") + 1));
}

Протестировано (кроме Chrome, эту проблему решается) в FF и IE8 для следующего простого результата JSON, для других браузеров и более сложных ответов нет гарантий ...


ПРИМЕЧАНИЕ: тип содержимого в этом случае - text / plain или text / html, я думаю - я использовал следующую функцию ASP.Net MVC для возврата результата

ContentResult System.Web.Mvc.Controller.Content(string content);

Где я возвратил объект JSON, например

System.Web.Script.Serialization.JavaScriptSerializer jsonSerializer 
    = new System.Web.Script.Serialization.JavaScriptSerializer();
var jsonResponse = jsonSerializer.Serialize(
    new { IArticleMediaId = 0
        , ImageUrl = Url.Content(fullImgPath)
        });
return Content(jsonResponse);
0 голосов
/ 17 апреля 2016

В ajaxFileUpload.js в uploadCallback () замените

io.contentWindow.document.body.innerHTML.innerHTML

на

$(io.contentWindow.document.body.innerHTML).html()
...