首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果传输没有传输任何数据

如果传输没有传输任何数据
EN

Stack Overflow用户
提问于 2013-02-14 19:40:01
回答 2查看 5.2K关注 0票数 5

我使用jQuery-文件上传jQuery-Iframe-传输来尝试获得对早期IE版本的支持。

我已经将forceIframeTransport选项设置为true,以便它在所有浏览器中的行为方式大致相同,但在服务器端使用iframe传输时,无论是哪个浏览器,我似乎都不会返回任何数据。

我已经吐出了请求头服务器端,然后我返回:

代码语言:javascript
复制
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()),输入缓冲区也是空的:

代码语言:javascript
复制
$handle = fopen('php://input', 'r');

$file_data = '';

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

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

当我不使用iframe的时候一切都很好,但是我需要IE支持.有没有人有使用iframes传输文件的经验,并且可能知道为什么没有数据通过?

当我使用jQuery-File-Upload / js / jquery.iframe-transport.js并强制使用iframe传输时,它在Chrome中工作,但是请求甚至没有到达IE中的服务器。

当我使用jquery.iframe transport.jquery.iframe-transport.js并强制使用iframe传输时,它在Chrome中就会中断,但这很好,因为Chrome支持正确的XHR文件传输,并且请求至少击中IE中的服务器,但没有数据。

我已经更新了我的脚本以支持任何一种传输方法:

代码语言:javascript
复制
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“时,我现在正在IE8中进行专门的测试。但我需要支持回到7点。这家伙声称支持所有的IE6。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-15 00:20:38

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

首先,您需要使用与jQuery捆绑在一起-文件上传提供的传输插件,因为它是为它设计的;)我不太清楚为什么另一个插件会更进一步,但我马上就会讲到。

我在IE中注意到,在核心jquery库的某个地方,我得到了一个“访问被拒绝”的JavaScript错误。从我在网上读到的内容来看,这通常发生在你试图提交到另一个域的URL时,而我并没有这样做,所以我拒绝了它。

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

我再次检查了form.action,URL看起来仍然很好。通过一些谷歌-福,我发现如果事件不是起源于原始/本机文件输入元素,也可以得到此错误。

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

拿出我的假上传按钮,把本地的一个(<input type="file"/> fyi)重新打开,现在所有的浏览器都很有魅力。哇哈!

票数 10
EN

Stack Overflow用户

发布于 2014-10-23 02:04:29

不管值多少钱..。

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

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

当我将服务器回复从400改为401时,UI工作得很好.

再说一遍,“因为它的价值。”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14882713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档