婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > Ajax請求響應(yīng)中用window.open打開新窗口被攔截的解決方法

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

熱門標(biāo)簽:騰訊地圖標(biāo)注位置能用多久 云呼外撥網(wǎng)絡(luò)電話系統(tǒng) 地圖標(biāo)注項(xiàng)目怎么樣 ai機(jī)器人電銷資源 超級(jí)大富翁地圖標(biāo)注 越南河內(nèi)地圖標(biāo)注 機(jī)器人電銷騙局揭秘 個(gè)人怎樣在百度地圖標(biāo)注地名 硅語電話機(jī)器人公司

一、問題描述

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

二、問題分析

  瀏覽器之所以攔截新開窗口是因?yàn)樵摬僮鞑⒉皇怯脩糁鲃?dòng)觸發(fā)的,所以它認(rèn)為這是不安全的就攔截了,即使 ajax 回調(diào)函數(shù)中模擬執(zhí)行 click 或者 submit 等用戶行為(trigger('click')),瀏覽器也會(huì)認(rèn)為不是由用戶主動(dòng)觸發(fā)的,因此不能被安全執(zhí)行,所以被攔截。

說明:

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

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

三、解決方案

在ajax請求之前,先用window.open 打開一個(gè)空白窗口,然后在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;
})
}

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

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

后面如果ajax正常返回,則因?yàn)樵O(shè)置了location值,原來打印的信息會(huì)被新的頁面信息覆蓋。

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

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

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

上面的做法,因?yàn)槭菍jax請求的結(jié)果判斷后,才打開新窗口,避免了上面說的問題。
但是因?yàn)槭峭秸埱螅谖覀儨y試中發(fā)現(xiàn)一個(gè)問題,如果服務(wù)器響應(yīng)時(shí)間過長,一是界面會(huì)停頓(用戶體驗(yàn)不好),二是新窗口會(huì)被攔截。

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

四、小結(jié)

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

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

您可能感興趣的文章:
  • Ajax請求成功后打開新窗口地址
  • ajax怎么打開新窗口具體如何實(shí)現(xiàn)
  • Ajax打開新窗口被瀏覽器攔截的兩種解決辦法

標(biāo)簽:舟山 洛陽 林芝 遼源 邢臺(tái) 鄭州 內(nèi)蒙古 海南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Ajax請求響應(yīng)中用window.open打開新窗口被攔截的解決方法》,本文關(guān)鍵詞  Ajax,請求,響應(yīng),中用,window.open,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Ajax請求響應(yīng)中用window.open打開新窗口被攔截的解決方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于Ajax請求響應(yīng)中用window.open打開新窗口被攔截的解決方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 靖西县| 北票市| 且末县| 延长县| 平安县| 阳城县| 汤原县| 皮山县| 喜德县| 金平| 博乐市| 保定市| 娄烦县| 厦门市| 巨野县| 左权县| 延安市| 江山市| 武鸣县| 郎溪县| 阿坝| 龙陵县| 自治县| 泰顺县| 陆良县| 昭通市| 竹溪县| 康乐县| 左云县| 休宁县| 舞阳县| 崇左市| 威信县| 梁河县| 延寿县| 辽宁省| 平泉县| 巩义市| 安义县| 花莲市| 耒阳市|