簡體   English   中英

JQuery File Upload插件,Internet Explorer和IFrame傳輸

[英]JQuery File Upload plugin, Internet Explorer, and IFrame transport

我正在使用此插件 (僅是基本版本),並利用所有完善的功能來進行進度更新以與自己的UI配合使用(使用Knockout.js和Twitter Bootstrap)。 這是上下文的一些代碼片段:

    // The file is sent to an ASP.NET MVC Web Api service to do all the business logic/DB stuff
    uploadUrl = http://web.api.url/?apikey=key

    $("#fileUpload" + "@index").fileupload({
        headers: {
            'Authorization': "@Html.AccessToken()",
            'Accept': $.support.ajax ? "application/json" : "text/plain"
        },
        url: uploadUrl,
        add: function (e, data) {
            $.each(data.files, function (index, file) {
                // add to KO viewmodel
            });
            data.submit();
        },
        fail: function (e, data) {
            var error = data.errorThrown;
            var text = data.textStatus;
        },
        done: function (e, data) {
            // do some more viewmodel operations
        },
        progress: function (e, data) {
            var progressPercentage = parseInt(data.loaded / data.total * 100, 10);
            // update viewmodel
        }
    });

#fileUpload<Index>元素是文件輸入

這在Chrome,FF和Safari中效果很好,但是(驚奇的是)在IE中卻沒有。 嘗試從文件輸入中選擇文件時,我得到一個非常奇怪的響應-瀏覽器打開一個下載對話框?

Do you want to open or save ?apikey=key (61 bytes) from webapiserver?

我嘗試在文件上傳事件偵聽器中使用帶有斷點的IE腳本調試器,甚至從未將其插入內部。 我在研究中看到過各種文章和文章,這些文章和文章表明application / json的接受類型會破壞IE,因此我的代碼中有條件嘗試處理該問題。

有什么我想念的嗎?

您的問題出在服務器端。

IE有點像dumbo,他接受服務器提供的第一種內容類型,因此您始終需要牢記FIRST嘗試使用text/plaintext/html進行回答。

但是,jQuery插件在FAQ中提到這一點。

這是對我有用的C#修復程序的實現

    var result = Json(statuses, JsonRequestBehavior.AllowGet);

    if (HttpContext.Request.AcceptTypes.Contains("application/json")) 
    {
        result.ContentType = "application/json";
    } 
    else // Hack for IE9 
    {
        result.ContentType = "text/plain";
    }

    return result;

這是因為返回的數據是application / json。 您需要服務器指定內容類型text / html,以防止IE將其解釋為下載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM