2013-02-14 171 views
4

我使用jQuery-File-UploadjQuery-Iframe-Transport試圖獲得對IE舊版本的支持。iframe傳輸不傳輸任何數據

我,這樣它的行爲或多或少在所有瀏覽器相同的方式設置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 = ''; 

這一切都工作得很好,當我沒」 t使用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。 This guy聲稱支持一路回到IE 6.

回答

10

幾個小時後,我終於找到了這個問題。

首先,您需要使用來自bundled with jQuery-file-upload的傳輸插件,因爲它是爲它製作的;)我不太確定爲什麼另一個人會更進一步,但我會在一分鐘之內做到這一點。

我注意到在IE瀏覽器中,我在覈心jquery庫中某處發現了「訪問被拒絕」的JavaScript錯誤。根據我在網上閱讀的內容,當您嘗試提交不同域名的URL時,通常會發生這種情況,而我並沒有這樣做,所以我就駁回了。

我在比較兩種不同的傳輸腳本做了什麼不同,當我在一個版本中說form.submit(),另一個版本時說form[0].submit()。所以我嘗試添加[0],然後注意到「訪問被拒絕」錯誤改爲指向該行。很明顯,它不喜歡我提交文件的位置。

我仔細檢查了form.action,網址仍然顯示正常。通過一些Google-fu我發現,如果事件不是來自原始/本機文件輸入元素,您也可以得到此錯誤。

我已經用一個奇特的輸入替換了本機輸入,然後在隱藏的本機輸入上觸發了一個「假」「點擊」事件。這不喜歡。

剔除了我的假上傳按鈕,並將原生的一個(<input type="file"/> fyi)重新放回,現在,所有瀏覽器中的所有功能都變得非常有魅力。好哇!

+1

感謝您的分享! – Saperlipopette 2013-05-27 14:28:56

+0

亂碼通過尋找其他IE/9與jQuery文件上傳問題的很多網站。搜索'iframe傳輸ie8無法正常工作'後,我發現這一點 - 你救了一天!謝謝 :) – Hippie 2014-05-02 00:12:39

0

對於它的價值......

我用jQuery v1.9.1的上的文件上傳到服務器同步文件之前做病毒掃描工作。如果文件有病毒,我們會返回HTTP 400,如果沒有病毒,則返回HTTP 200。

HTTP 400響應導致IE8「訪問被拒絕」結果。

當我將服務器響應從400更改爲401時,UI工作正常。

再次,「爲了什麼是值得的。」