好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Ajax請求過程中下載文件在FireFox(火狐)瀏覽器下的兼容問題

Ajax請求過程中下載文件在FireFox(火狐)瀏覽器下的兼容問題

熱門標簽:老虎郵局地圖標注點 外呼系統獲取客戶手機號 上海浦東百度地圖標注中心注冊 科智聯智能電銷機器人 目標三維地圖標注 徐州電銷卡外呼系統供應商 百靈鳥 青海醫療智能外呼系統怎么樣 襄陽外呼系統接口

需求很簡單,點擊一個文件鏈接下載該文件,同時向后臺發送請求。需求很常見,用戶點擊下載后通常要進行下載量的統計,統計的話可以利用 script標簽 或者 img標簽(圖片ping) 的跨域能力,將它們的 src 屬性指向統計地址,但是這次用了 ajax 進行統計,遂出現了這個問題。

demo 代碼如下:

a id="a" href="http://c758482.r82.cf2.rackcdn.com/Sublime Text 2.0.2 x64 Setup.exe" >click/a>
script src="jQuery.js">/script>
script>
document.getElementById("a").onclick = function(e) {
$.post("data.php");
};
/script>

我們都知道,如果一個 a 標簽同時擁有 onclick 事件和 href 屬性,onclick 事件的回調會在默認事件(即跳轉)之前執行,這也正是可以在 onclick 事件中用類似 e.preventDefault() 的代碼去除默認事件(即跳轉)的原因。所以以上代碼,如果點擊 a 標簽,首先會執行 onclick 事件的回調,即發送 ajax 請求,理論上,因為代碼中的 ajax 是異步的(其實同步也一樣),所以會一邊請求一邊打開下載文件。

chrome、UC、opera、2345瀏覽器中表現均和預期一致,firefox 下點擊能跳出下載文件,但是 ajax 部分報錯,IE 下未測試。

一開始的錯誤想法是,跨域導致報錯。當點擊下載鏈接時,ajax 請求會以為頁面即將跳到 href 所指的地址,導致瀏覽器以為該 ajax 跨域。該錯誤想法很快被推翻,一是因為先進行 ajax 請求,所以請求瞬間并未跨域;二是并未報跨域錯誤(通常如果是跨域錯誤控制臺會指出);三是如下代碼更進一步證明了該錯誤。

a id="a" href="http://c758482.r82.cf2.rackcdn.com/Sublime Text 2.0.2 x64 Setup.exe" >click/a>
script src="jQuery.js">/script>
script>
$.post("data.php"); // data.php sleep(100)
/script>

打開該頁面,隨即進行 ajax 請求,一旦點擊了下載按鈕,請求即被中止。如果 a 標簽的 href 屬性值不是文件地址,而是用任意的一個 url 替換,如果點擊 a 標簽,頁面會立即跳轉到該標簽所指向的地址,頁面都不存在了,ajax 自然也就中斷了。如果 a 標簽指向的是文件地址,在 ff 下是不是也會被一樣地解析呢(瀏覽器以為要跳到該地址了,而將 ajax 中止)?

答案是肯定的,我在 stackoverflow 中找到了答案。

When clicking the download link you are leaving the page, even it does not look so. If there would no file transfer, you would see the requested page.. try to set a target="_blank" or use an iframe as target for the link.

從提問可以看出,2010 年時 chrome 和 ff 都有類似的問題,而 chrome 或者說是 webkit 內核的瀏覽器在之后的版本迭代中修復了這個問題, ff 則一直將問題留到了現在(個人認為這不太合理)。

知道了問題的根源,解決方案也就呼之欲出了。

方法一:

最簡單的方法無非是給 a 標簽加上 target="_blank",事實上,通常網頁都是這么做的,這也是值得肯定的做法。

方法二:

既然 a 標簽的默認行為會使得 ajax 請求中斷,那么將 "默認行為" 放在請求之前呢?

a id="a" href="javascript:;" >click/a>
script src="jQuery.js">/script>
script>
document.getElementById("a").onclick = function(e) {
location.href = "http://c758482.r82.cf2.rackcdn.com/Sublime Text 2.0.2 x64 Setup.exe";
$.post("data.php");
};
/script>

方法三:

設置定時器使請求延遲,但是因為 a 標簽的默認跳轉不屬于 Javascript 線程能控制的范圍,所以這個延遲閾值的設置非常重要,我本地測試結果居然是 2ms(也是萬萬沒想到),一般設置為 100ms 左右就 ok 了。 這個方法不優雅,不應該使用 。

a id="a" href="http://c758482.r82.cf2.rackcdn.com/Sublime Text 2.0.2 x64 Setup.exe" >click/a>
script src="jQuery.js">/script>
script>
document.getElementById("a").onclick = function(e) {
setTimeout(function() {
$.post("data.php");
}, 100);
};
/script>

以上內容給大家介紹了Ajax請求過程中下載文件在FireFox(火狐)瀏覽器下的兼容問題,希望對大家今后的工作學習有所幫助。

您可能感興趣的文章:
  • JavaScript讀二進制文件并用ajax傳輸二進制流的方法
  • 解決IE下AjaxSubmit上傳文件提示下載文件問題
  • Ajax請求二進制流進行處理(ajax異步下載文件)的簡單方法

標簽:佛山 荊州 辛集 紅河 股票 咸寧 揭陽 商洛

巨人網絡通訊聲明:本文標題《Ajax請求過程中下載文件在FireFox(火狐)瀏覽器下的兼容問題》,本文關鍵詞  Ajax,請求,過程中,下載,文件,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Ajax請求過程中下載文件在FireFox(火狐)瀏覽器下的兼容問題》相關的同類信息!
  • 本頁收集關于Ajax請求過程中下載文件在FireFox(火狐)瀏覽器下的兼容問題的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 欧美亚洲国产另类无码综合网| 久久久91| 老赵抱着媛媛在厨房做饭视频大全| jiZZ日本ZZZ日本护士软件| 国产一级片免费观看| 我想操| 国产AⅤ无码旗袍丝袜美腿在线看| 剑来婬乱版H全文阅读| 男女摸下面视频| 好吊操在线| 久久免费看A片毛片老牛69| 亚洲国产精品一区二区无码 | 日本精品一区二区三区在线观看| 人与野鲁?毛片699| 久久亚洲精品中文| 三级4级全黄在线看| 纯欲大尺度小说| 国产三级电影院| 成人国产AV精品秘?密桃观看 | 中文字幕人成乱码在线观看| 古代级a毛片在线| 少妇被??到高潮出水| 国产伦精品久久久一区二区三区| 男女吃奶一进一出动态图| mmkk在线看片| 被粗大的??巴捣出白浆江澄视频 | 爱看精品福利视频观看 | 老熟女毛茸茸浓毛| 97精品伊人久久久大香线蕉最新章节| 秀人网嫩模私拍福利在线观看| 偷吃民工的大(男同)| 日韩久久久久久精品无码品善网| 二个人的视频| 一级毛片播放| 老师下面很湿很爽很紧| 欧美一级A片久久久无码免费借种| 亚洲精品国偷拍| 伊人手机在线视频| 国产精品免费观看网站| 女人毛片A毛片久久人人爱| 女人与狗一级毛片|