2014-09-24 29 views
0

我必須完成的事情是通過<input type="file"... 處理它與PHP腳本選擇我的圖像文件,調整圖像大小並返回base64作爲php腳本的結果,圖像在圖像中的回聲值。我已經使用Firefox,Chrome和Internet Explorer 10完成了它。ie8和ie9與jquery.form.js返回HTML而不是數據從PHP回聲

我正在使用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」字符串。我希望有人能幫幫忙。提前致謝。

+0

和你回來的這個html是什麼? PHP本身不會將你的echo/print輸出封裝在html中。唯一一次輸出html而不告訴錯誤/警告消息。 – 2014-09-24 21:45:48

+0

它返回的HTML幾乎與頁面1相同,佈局相同,因爲我把它放在描述中,似乎是html,就好像頁面在哪裏重新加載一樣。 – user3892587 2014-09-24 22:02:25

回答

0

我不知道如何完成ajaxForm的內部工作,但我想它使用iframe來發布數據並在iframe加載時讀取iframe。 IE將強制返回的字符串爲HTML,方法是創建「缺少」<html>和<body>元素。你應該告訴IE不將其解析爲一個HTML通過設置Content-Type的HTTP標頭文本/純:

<?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

=== EDIT 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的限制。

+0

嗨,我已經試過了,而不是打印在控制檯的數據,它顯示彈出窗口說:「你想打開或保存script.php」,如果我點擊打開它會打開一個文件,其中的內容一些警告並傳達給base64的圖像。有沒有辦法獲得這些信息並避免彈出窗口出現? – user3892587 2014-09-24 22:00:50

+0

愚蠢的IE ...你可以請嘗試添加'header('Content-Disposition:inline; filename = File.txt');'在標題之後? – Zenorbi 2014-09-24 22:12:30

+0

下載不再出現,但數據又是一個html。是啊傻的IE:頁。 – user3892587 2014-09-24 22:18:55