我正在使用jQuery-File-Upload和jQuery-Iframe-Transport来尝试获得对旧版本 IE 的支持。
我已将forceIframeTransport
选项设置为true
,使其在所有浏览器中的行为或多或少都相同,但无论浏览器在使用 iframe 传输时如何,我似乎都没有在服务器端获取任何数据。
我已经吐出了服务器端的请求标头,然后我回来了:
array(
Host => "*******"
Connection => "keep-alive"
Content-Length => "0"
Accept => "*/*"
Origin => "**************"
X-Requested-With => "XMLHttpRequest"
User-Agent => "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"
DNT => "1"
Referer => "***********"
Accept-Encoding => "gzip,deflate,sdch"
Accept-Language => "en-GB,en-US;q=0.8,en;q=0.6"
Accept-Charset => "ISO-8859-1,utf-8;q=0.7,*;q=0.3"
Cookie => "*********"
)
[ *****
s 表示漏掉了信息;你不需要那个;)]
看起来不错,但$_REQUEST
它是空的(即array()
),并且输入缓冲区也是空的:
$handle = fopen('php://input', 'r');
$file_data = '';
while(($buffer = fgets($handle, 4096)) !== false) {
$file_data .= $buffer;
}
fclose($handle); // $file_data = '';
当我不使用 iframe-transport 但我需要 IE 支持时,这一切都运行良好...有没有人有使用 iframe 传输文件的经验并且可能知道为什么没有数据通过?
当我使用jQuery-File-Upload / js / jquery.iframe-transport.js并强制 iframe 传输时,它可以在 Chrome 中运行,但请求甚至无法到达 IE 中的服务器。
当我使用jquery-iframe-transport / jquery.iframe-transport.js并强制 iframe 传输时,它会在 Chrome 中中断,但这很好,因为 Chrome 支持正确的 XHR 文件传输,并且请求至少在 IE 中到达服务器但没有数据来通过。
我已经更新了我的脚本以支持任一传输方法:
if(empty($_FILES)) {
$handle = fopen('php://input', 'r');
$file_data = '';
while(($buffer = fgets($handle, 4096)) !== false) {
$file_data .= $buffer;
}
fclose($handle);
} else {
$file_data = file_get_contents($_FILES['files']['tmp_name'][0]);
}
但同样,无论我做什么,我似乎仍然无法在 IE 中获取任何数据。
当我说“IE”时,我现在专门在 IE 8 中进行测试。我需要支持回到 7。这家伙声称一直支持到 IE 6。