最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Ajax請求響應(yīng)中用window.open打開新窗口被攔截的解決方法

 更新時間:2016年08月04日 11:44:30   作者:51kata  
ajax 異步請求成功后需要新開窗口打開 url,使用的是 window.open() 方法,但是會被瀏覽器給攔截,怎么解決呢,下面小編給大家解答下

一、問題描述

ajax 異步請求成功后需要新開窗口打開 url,使用的是 window.open() 方法,但是會被瀏覽器給攔截了,需要用戶點下。

二、問題分析

  瀏覽器之所以攔截新開窗口是因為該操作并不是用戶主動觸發(fā)的,所以它認(rèn)為這是不安全的就攔截了,即使 ajax 回調(diào)函數(shù)中模擬執(zhí)行 click 或者 submit 等用戶行為(trigger('click')),瀏覽器也會認(rèn)為不是由用戶主動觸發(fā)的,因此不能被安全執(zhí)行,所以被攔截。

說明:

1、如果是在 <a href="javascript:void(0)" onclick="fun()"></a> 這個中指定的 fun方法中調(diào)用 window.open()則不會被攔截,因為瀏覽器會認(rèn)為是主動的。 但是在ajax請求的響應(yīng)中打開窗口是會被攔截的。

2、如果不是打開新窗口,而是改原來的網(wǎng)頁地址,可以使用window.location = newurl 來實現(xiàn),這樣不會被攔截。

三、解決方案

在ajax請求之前,先用window.open 打開一個空白窗口,然后在ajax的響應(yīng)函數(shù)中設(shè)置該窗口的location屬性為新的url。

代碼示例如:

function fun(){
var tmpWin =window.open()
ajax(xxx, handle(){ 
//回調(diào)函數(shù)。這是偽代碼,語法不準(zhǔn)。
var newurl = xxxx
tmpWin.location = newurl;
})
}

上面方法,存在一個問題時,因為先打開了空白窗口,如果ajax請求失?。ňW(wǎng)絡(luò)或業(yè)務(wù)邏輯問題)后, 新窗口中就不會有正常的結(jié)果體現(xiàn),有可能造成用戶疑惑。
一個解決辦法是,當(dāng)ajax出現(xiàn)問題時,可以考慮給出一個提示,如 tmpWin.document.write("服務(wù)器處理異常");

甚至為了防止ajax響應(yīng)時間過長,當(dāng)窗口新建后,立即給出提示 tmpWin.document.write("服務(wù)器正在處理中,請稍后");

后面如果ajax正常返回,則因為設(shè)置了location值,原來打印的信息會被新的頁面信息覆蓋。

這里還有一種方法,但也有缺陷:

因為ajax可以設(shè)置為同步請求,這樣可以在ajax請求之后,利用window.open打開新窗口。如:

function fun(){
var result;
ajax({ //需要設(shè)置同步請求
.....
result = xxx 
.......
}) 
if(result){
window.open(xxxx)
}
}

上面的做法,因為是對ajax請求的結(jié)果判斷后,才打開新窗口,避免了上面說的問題。
但是因為是同步請求,在我們測試中發(fā)現(xiàn)一個問題,如果服務(wù)器響應(yīng)時間過長,一是界面會停頓(用戶體驗不好),二是新窗口會被攔截。

只有在服務(wù)器很快返回時才沒有問題。 我們測試時,在服務(wù)器代碼處理中sleep了1秒,發(fā)現(xiàn)新窗口就被攔截了。

四、小結(jié)

總結(jié)下,可以看出,對于在ajax返回后打開新窗口,沒有特別完美的方法。具體還是要根據(jù)自己系統(tǒng)的業(yè)務(wù)特點來采取相應(yīng)的做法。

以上所述是小編給大家介紹的Ajax請求響應(yīng)中用window.open打開新窗口被攔截的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • ajax 返回值自動添加pre標(biāo)簽的解決方法

    ajax 返回值自動添加pre標(biāo)簽的解決方法

    ajax返回的內(nèi)容,居然自動添加了pre標(biāo)簽,解決方法是修改一般處理程序的返回類型,遇到類似情況的可以參考下
    2014-07-07
  • 防止ajax重復(fù)請求的方法(GET和POST)

    防止ajax重復(fù)請求的方法(GET和POST)

    防止ajax重復(fù)請求的方法(GET和POST) ,需要的朋友可以參考下。
    2011-10-10
  • 談?wù)凙jax原理實現(xiàn)過程

    談?wù)凙jax原理實現(xiàn)過程

    Asynchronous javascript and xml(ajax),實現(xiàn)了客戶端與服務(wù)器進行數(shù)據(jù)交流過程。使用技術(shù)的好處是:不用頁面刷新,并且在等待頁面?zhèn)鬏敂?shù)據(jù)的同時可以進行其他操作
    2015-11-11
  • Spring MVC前端與后端5種ajax交互方法【總結(jié)】

    Spring MVC前端與后端5種ajax交互方法【總結(jié)】

    下面小編就為大家?guī)硪黄猄pring MVC前端與后端5種ajax交互方法【總結(jié)】。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 使用AJAX(包含正則表達(dá)式)驗證用戶登錄的步驟

    使用AJAX(包含正則表達(dá)式)驗證用戶登錄的步驟

    這篇文章主要介紹了使用AJAX(包含正則表達(dá)式)驗證用戶登錄的步驟,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • 經(jīng)典的20道AJAX面試題(必知必會)

    經(jīng)典的20道AJAX面試題(必知必會)

    本文給大家介紹20道jquery ajax面試題,在前端開發(fā)階段經(jīng)常會問到,今天小編給大家分享經(jīng)典的20道AJAX面試題,感興趣的朋友一起學(xué)習(xí)吧
    2016-09-09
  • JavaScript實現(xiàn)Ajax總結(jié)

    JavaScript實現(xiàn)Ajax總結(jié)

    ajax應(yīng)用非常普及,ajax的優(yōu)點大家都知道,具體就不多說了,其缺點還真不少,比如破壞瀏覽器的back功能,同一個url打開的界面并不是完全相同,還有安全性能等方面,至于有這么多的缺點,也阻止不了大家使用ajax的步伐,下文給大家分享javascript實現(xiàn)ajax小結(jié)吧
    2015-10-10
  • JQuery的ajax的用法在asp中使用$.ajax()實現(xiàn)

    JQuery的ajax的用法在asp中使用$.ajax()實現(xiàn)

    ajax的出現(xiàn)解決了很多的疑難問題,同時帶來了很多的方便,本文講述一下JQuery的ajax的用法在asp中使用$.ajax()來表示,感興趣的朋友可以了解下,或許本文對你有所幫助
    2013-01-01
  • Ajax方式實現(xiàn)定期更新頁面某塊內(nèi)容的方法

    Ajax方式實現(xiàn)定期更新頁面某塊內(nèi)容的方法

    這篇文章主要介紹了Ajax方式實現(xiàn)定期更新頁面某塊內(nèi)容的方法,涉及jquery中l(wèi)oad方法Ajax調(diào)用及setInterval定時執(zhí)行的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 使用ajax技術(shù)無刷新動態(tài)調(diào)用新浪股票實時數(shù)據(jù)

    使用ajax技術(shù)無刷新動態(tài)調(diào)用新浪股票實時數(shù)據(jù)

    由于最近網(wǎng)速慢的緣故,查看股票信息時網(wǎng)頁老是打不開。這幾天一直在研究ajax,于是用jquery自己做了一個自動讀取新浪股票實時數(shù)據(jù)的頁面
    2014-08-08

最新評論

五原县| 扎鲁特旗| 定州市| 双流县| 云龙县| 贡山| 仪征市| 太仆寺旗| 瑞安市| 松原市| 温泉县| 沁水县| 如东县| 莎车县| 都兰县| 宁明县| 谢通门县| 蓝田县| 镇康县| 安塞县| 独山县| 龙州县| 如皋市| 大竹县| 健康| 资兴市| 广饶县| 大安市| 来凤县| 靖江市| 咸宁市| 靖边县| 阿拉善盟| 方城县| 柘荣县| 鄯善县| 密山市| 夹江县| 佛冈县| 静海县| 广水市|