繁体   English   中英

iframe传输不传输任何数据

[英]iframe transport isn't transferring any data

我正在使用jQuery-File-UploadjQuery-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 => "*********"
)

[ *****表示泄露信息; 你不需要那个;)]

看起来没问题,但是$_REQUEST是空的(即array() ),输入缓冲区也是空的:

$handle = fopen('php://input', 'r');

$file_data = '';

while(($buffer = fgets($handle, 4096)) !== false) {
    $file_data .= $buffer;
}

fclose($handle); // $file_data = '';

当我不使用iframe传输但我需要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。

几个小时后,我终于找到了问题。

首先,你需要使用jQuery-file-upload捆绑的传输插件,因为它是为它制作的;)我不太确定为什么另一个更进一步,但我会在分钟。

我在IE中注意到我在核心jquery库中的某处获得了“访问被拒绝”的JavaScript错误。 从我在网上看到的情况来看,这通常发生在你试图提交到不同域名的URL时,我没有这样做,所以我驳回了它。

我正在比较两种不同的传输脚本的不同之处,当我在一个版本中使用form.submit()在另一个版本中使用form[0].submit()时。 所以我尝试添加[0] ,然后注意到“访问已拒绝”错误已更改为指向该行。 很明显,它不喜欢我提交文件的地方。

我仔细检查了form.action并且URL看起来仍然很好。 通过一些Google-fu,我发现如果事件不是源自原始/本机文件输入元素,您也会收到此错误。

我用一个奇特的输入取代了原生输入,然后在隐藏的原生输入上触发了“假”“点击”事件。 这不喜欢。

拿出我的假上传按钮并重新插入原生的按钮( <input type="file"/> fyi),现在一切都像所有浏览器中的魅力一样。 好哇!

物有所值 ...

我正在使用jQuery v1.9.1在文件上传到服务器之前同步对文件进行病毒扫描。 如果文件有病毒,我们会返回HTTP 400,如果不是病毒则返回HTTP 200。

HTTP 400响应导致IE8“访问被拒绝”结果。

当我将服务器响应从400更改为401时,UI完美运行。

再次,“为了它的价值。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM