【问题标题】:iframe transport isn't transferring any dataiframe 传输不传输任何数据
【发布时间】:2013-01-30 17:17:24
【问题描述】:

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

[*****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 支持时,这一切都很好,但我需要 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。 This guy 声称支持一直到 IE 6。

【问题讨论】:

    标签: php jquery-file-upload jquery-iframe-transport


    【解决方案1】:

    为了它的价值......

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

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

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

    再说一遍,“物有所值。”

    【讨论】:

      【解决方案2】:

      经过几个小时,我终于找到了问题所在。

      首先,您需要使用 bundled with jQuery-file-upload 提供的传输插件,因为它是为它设计的 ;) 我不太清楚为什么另一个更进一步,但我会在一分钟内解决这个问题.

      我注意到在 IE 中,我在核心 jquery 库的某处收到“拒绝访问”JavaScript 错误。根据我在网上阅读的内容,当您尝试提交到不同域的 URL 时,通常会发生这种情况,我没有这样做,所以我将其驳回。

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

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

      我已经用一个花哨的输入替换了原生输入,然后在隐藏的原生输入上触发了一个“假”“点击”事件。这是它不喜欢的。

      取出我的假上传按钮,然后将本地按钮 (<input type="file"/> fyi) 放回去,现在所有浏览器中的一切都像魅力一样运行。呵呵!

      【讨论】:

      • 翻遍了很多网站,寻找 jQuery 文件上传的其他 IE/9 问题。在搜索 iframe transport ie8 not working 之后,我找到了这个 - 你拯救了这一天!谢谢:)
      猜你喜欢
      • 2015-09-23
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 2020-11-03
      • 1970-01-01
      • 2012-06-05
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多