ie8和ie9与jquery.form.js返回html而不是PHP的数据回显

时间:2014-09-24 21:27:42

标签: javascript php jquery html internet-explorer-8

我必须完成的事情是通过<input type="file"...选择我的图像文件 使用php脚本处理它,调整图像大小并返回字符串中的图像echo的base64值作为php脚本的结果。我已经使用Firefox,Chrome和Internet Explorer 10完成了它。

我正在使用jquery.form.js在ie8和ie9中完成相同的行为来对php脚本执行ajax调用并返回数据。问题是在这个浏览器中,Internet Explorer 8-9返回一个html(从控制台查看),好像该页面即将重新加载(因为通常的php调用在ie8-9中表现)。我需要注意的是,无论php做什么,它总是返回html,即使是如此简单:

<?php
   echo "Hello World";
?>

这是我的脚本

HTML

<form id="uploadForm" action="%MYURL%" method="post">
        <input name="userImage" type="file" class="inputFile" id="inputFileID" size="43"  style="margin-right: 45px" />
        <input type="submit" id="save-data-image" unselectable="on" data-corner="tr bl 5px" rel="save" class="button tiny blue left" value="Save">
</form>

JAVASCRIPT

$('#uploadForm').ajaxForm(function(data) { 
      console.log("data:" + data);
}); 

所以目标是在IE8-9中返回“Hello World”字符串。我希望有人能帮帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我不知道ajaxForm的内部工作方式是如何完成的,但我猜它会使用iframe发布数据并在iframe加载时读取iframe。 IE将通过创建&#34;缺失&#34;来强制返回的字符串为HTML。 &LT; HTML&GT;和&lt; body&gt;元素。您应该通过将Content-Type HTTP标头设置为text / plain:

告诉IE不要将其解析为HTML
<?php
    header('Content-Type: text/plain;charset=utf-8');
    header('Content-Disposition: inline;filename=File.txt');
    echo "Hello World";
?>

===编辑===

不起作用!请改为https://github.com/malsup/form/issues/302

===编辑2 ===

我已经把这个搞得一团糟了,我有这个工作。

HTML:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>UNTITLED</title>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="//malsup.github.io/min/jquery.form.min.js"></script>
<script>
$(function() {
    $("#myForm").ajaxForm(function(data) {
        console.log(data);
        $("#myImg").attr("src", "data:image/png;base64, " + data);
    });
});
</script>
</head>
<body>
<form method="post" action="send.php" id="myForm" enctype="multipart/form-data">
<input name="a" type="file">
<input type="submit" value="Submit">
</form>
<img id="myImg">
</body>
</html>

PHP:

<?php
header('Content-Type: text/html');
echo base64_encode(file_get_contents($_FILES['a']['tmp_name']));

它确实在IE8中呈现得很好(没有模仿)。唯一的问题是,图像不能大于4K,因为这是IE的限制。