我对javascript很新,我一整天都在寻找解决这个问题的方法。我发现了许多问题/答案但没有任何效果。
我有一个包含文件上传的页面,我想通过服务器端验证例程运行此文件,然后在页面上显示验证结果。除了IE(Safari,Chrome& Chromium,Firefox)之外,我的所有功能都很出色。
为了使文件上传在IE上运行,用户需要通过提交按钮提交表单。所以我在HTML中使用条件注释将其添加到页面上。在javascript中我使用我在这里找到的IE检测功能。这部分工作正常。
以下是发出ajax请求的函数:
function handleUpload()
{
showSpinner();
var dFile = new FormData(document.getElementById("devConsValidate")); // this works in IE but only if called by a submit method
$.ajax(
{
cache: false,
async: false,
url: 'validator.php',
type: 'POST',
data: dFile,
dataType: 'JSON',
processData: false, // this is key for formdata
contentType: false, // so is this
success: function(response)
{
var result = response.result;
var validationCode = response.validation_code;
var errors = response.errors;
var htmlCode = '<h2>';
if (result == 'SUCCESS')
htmlCode += '<font color="green">';
else
{
htmlCode += '<font color="red">';
}
htmlCode += 'Validation ' + result + '</font></h3>';
if (result == "FAIL")
{
htmlCode += '</center>';
for (var i in errors)
htmlCode += errors[i] + '<br>';
htmlCode += '<br><a href="validator_help.php">Validator Help </a>';
}
else
{
htmlCode += 'Please use the following code when submitting your request.<br><br><font color ="#00aa54" size="+2">' + validationCode + '</font>';
}
// make some beautiful html
$('#resultsArea').html(htmlCode);
},
error: function (XMLHttpRequest, textStatus, errorThrown)
{
alert('error: ' + errorThrown);
}
});
}
函数handleUpload()在文件更改事件或正在提交的表单上调用。 validator.php返回一个json_encoded值数组。
问题是当使用IE时,ajax成功回调永远不会被触发,浏览器只会在空白页面上显示原始JSON字符串,因此ajax调用正在运行并返回预期数据。在其他浏览器上,成功回调触发并解析json,并将相应的代码插入到页面上的div中。
完整的javascript文件:http://pastebin.com/G9MYBis5
有什么想法吗?
答案 0 :(得分:2)
好的,所以我的解决方案就是让这一行成为我头标中的第一行:
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
这使IE10工作,对于IE9及以下我只需要制作静态页面,因为我能够在没有FormData的情况下上传文件,只是从基本的html表单提交而不是AJAX获取它。为此,我为IE用户添加了使用条件注释的提交按钮。