带有jquery.form.js的ie8和ie9返回html,而不是来自PHP的数据echo

ie8 and ie9 with jquery.form.js returns html instead of data echo from PHP

本文关键字:数据 PHP echo html js form jquery ie8 返回 ie9 带有      更新时间:2023-09-26

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

我使用jquery.form.js在ie8和ie9中完成相同的行为,对php脚本进行ajax调用并返回数据。问题是,在这种浏览器中,InternetExplorer8-9返回一个html(从控制台查看),就好像页面即将重新加载一样(就像ie8-9中常见的php调用一样)。我需要注意的是,无论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"字符串。我希望有人能帮忙。提前谢谢。

我不知道ajaxForm的内部工作是如何完成的,但我猜它使用iframe来发布数据,并在加载iframe时读取回iframe。IE将通过创建"missing"<html>并且<身体>元素。您应该通过将Content-TypeHTTP头设置为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中的限制。