jQuery IE < 10 中的文件上传响应不包含 jqXHR.responseText 属性
jQuery File Upload response does not contain jqXHR.responseText property in IE < 10
我在尝试从服务器获取响应 Html 时遇到了 ie8/ie9 的一些问题。
$(function() {
$('#fileupload').fileupload({
url: '@Url.Action("Save", "CounterDoc")',
dataType: 'json',
formData: window.globalParams,
fail: function (e, data) { // case when server returns NOT JSON - is fail.
var responseObj = {};
responseObj.responseText = data.response().jqXHR.responseText;
}
});
});
这里 data.response().jqXHR.responseText 在旧的 Ies 中总是未定义的。我究竟做错了什么?我可以在旧浏览器中获取响应正文吗?
在 FAQ 中找到答案:
因为 ie<10 版本使用 iframe 来发送-接收数据而不是 xhr 响应主体无法以通常的方式访问。因此,对于 ie,如果服务器响应无效数据类型,我必须重写转换器以抛出错误。
$.ajaxSetup({
converters: {
'iframe json': function (iframe) {
var result = {};
result.responseText = iframe && $(iframe[0].body)[0].innerHTML;
if (!IsJsonString(result.responseText)) { // answer IS NOT JSON, html contains error data
throw result;
}
else { // server sent valid JSON - OK
return $.parseJSON(result);
}
}
}
});
我在尝试从服务器获取响应 Html 时遇到了 ie8/ie9 的一些问题。
$(function() {
$('#fileupload').fileupload({
url: '@Url.Action("Save", "CounterDoc")',
dataType: 'json',
formData: window.globalParams,
fail: function (e, data) { // case when server returns NOT JSON - is fail.
var responseObj = {};
responseObj.responseText = data.response().jqXHR.responseText;
}
});
});
这里 data.response().jqXHR.responseText 在旧的 Ies 中总是未定义的。我究竟做错了什么?我可以在旧浏览器中获取响应正文吗?
在 FAQ 中找到答案:
因为 ie<10 版本使用 iframe 来发送-接收数据而不是 xhr 响应主体无法以通常的方式访问。因此,对于 ie,如果服务器响应无效数据类型,我必须重写转换器以抛出错误。
$.ajaxSetup({
converters: {
'iframe json': function (iframe) {
var result = {};
result.responseText = iframe && $(iframe[0].body)[0].innerHTML;
if (!IsJsonString(result.responseText)) { // answer IS NOT JSON, html contains error data
throw result;
}
else { // server sent valid JSON - OK
return $.parseJSON(result);
}
}
}
});