我在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> <span class="doc- date">9/30/2014</span> <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<'/span> <span class=''"doc-date'"'>9'/30'/2014<'/span> <span class=''"doc-user'"'>Ling Chow<'/span><i class=''"fa' fa-download'?=""><'/i><i class=''"fa' fa-times-circle'?=""><'/i><'/li>"}}</i></i></span></span></span></li>
In IE10/Chrome
{"values":{"categoryId":"1"},"template":{"body":"<li id='"9'"><span class='"doc-title'">accredmaster2.html<'/span> <span class='"doc-date'">9'/30'/2014<'/span> <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,并且不会试图逃避所有内容。