来自IE9的AJAX响应包含无效字符


AJAX response from IE9 contains invalid characters

我在IE9中得到了一个明显不同的JSON响应,并且不确定事情在哪里崩溃:

我的JS(这是使用jquery表单-http://malsup.com/jquery/form/):

var self = this,
                options = {
                    beforeSubmit: this.beforeSubmit,
                    uploadProgress: this.uploadProgress,
                    success: this.uploadSuccess,
                    resetForm: true
                },
                form = $(this.forms.addNewDocument);
        $(form).ajaxSubmit(options);

我正在记录uploadSuccess中的响应。

在我的PHP中,在使用json_encode之前,我得到的响应是:

array(2) {
 ["values"]=>
 array(1) {
   ["categoryId"]=>
   string(1) "1"
 }
 ["template"]=>
 array(1) {
   ["body"]=>
   string(211) "<li id="18"><span class="doc-title">test4.txt</span>&nbsp;<span class="doc-    date">9/30/2014</span>&nbsp;<span class="doc-user">Ling Chow</span><i class="fa fa-download"></i><i class="fa fa-times-circle"></i></li>"
 }
}

然后,当我将数组封装在json_encode($myresult)中并记录ajax响应时,我得到以下内容:

In IE 9
 {"values":{"categoryId":"1"},"template":{"body":"<li id=''"6'"'><span class=''"doc-    title'"'>test.txt&lt;'/span&gt;&nbsp;<span class=''"doc-date'"'>9'/30'/2014&lt;'/span&gt;&nbsp;<span class=''"doc-user'"'>Ling Chow&lt;'/span&gt;<i class=''"fa' fa-download'?="">&lt;'/i&gt;<i class=''"fa' fa-times-circle'?="">&lt;'/i&gt;&lt;'/li&gt;"}}</i></i></span></span></span></li>
In IE10/Chrome
{"values":{"categoryId":"1"},"template":{"body":"<li id='"9'"><span class='"doc-title'">accredmaster2.html<'/span>&nbsp;<span class='"doc-date'">9'/30'/2014<'/span>&nbsp;<span class='"doc-user'">Ling Chow<'/span><i class='"fa fa-download'"><'/i><i class='"fa fa-times-circle'"><'/i><'/li>"}} 

IE9添加了很多单引号,其中有一个"?=",看起来它提前结束了JSON。为什么会发生这种情况,为什么是IE9特有的?

在php中的json_encode之前使用header('content-type: application/json');。这将使IE9意识到您正在返回json,并且不会试图逃避所有内容。