JS 点击元素发ajax请求 打开一个新窗口

JS
点击元素发ajax请求 打开一个新窗口

经常在项目中会碰到这样的需求,点击某个元素后,需要发ajax请求,请求成功以后,开发需要把链接传给前端(或者说请求成功后打开新窗口),前端需要通过新窗口打开这个链接,其实这样的原理大家可能觉得非常简单,想起来非常简单,用JS中的window.open就可以实现打开新的窗口,或者点击div元素,发ajax请求成功后,动态把链接传给a标签,然后再触发a标签事件,也可以实现,对吧?曾几何时,我也曾经把这样的问题发到JS群里面去,很多JS社区朋友说
龙恩
这么简单的问题你都实现不了?你怎么做前端的?大家都觉得非常简单,最后讨论了一个多小时,都没有结果!很多人提议用window.open,还有人提用location.href
="" 然后设置target="_blank"等,还有提出用form表单去提交,但是不管他们用任何方式,效果都一样,在主流的浏览器 firefox and
chrome 结果是:被浏览器拦截了!(IE我不管),正常的情况下 点击一个元素 用window.open打开一个新的网页
都没有问题,并且不会被浏览器拦截!这个大家都知道,但是为什么需要多一步发ajax请求
且被浏览器拦截了呢?为了解决这么一个问题,肯定要做做demo,我是这样这样做的:

<div class = "testA" style="cursor:pointer;">点击我弹出一个新窗口</div>

JS如下:


$(‘.testA‘).unbind(‘click‘).bind(‘click‘,function(){
$.ajax({ url:‘http://localhost/demo/windowopen/test.php‘,
‘type‘:‘POST‘,
dataType:‘json‘,
success: function(data){
if(data && data.success) {
window.open(‘http://www.baidu.com‘);
}
}
});
});

URL 我可以不管 反正就是一个请求 且是同域的,这是ajax异步的请求,为了解决这个问题,我们可以让他们同步请求 就可以实现,firefox and
chrome也不会被拦截了!

JS代码如下:


$(‘.testA‘).unbind(‘click‘).bind(‘click‘,function(){
$.ajax({
url:‘http://localhost/demo/windowopen/test.php‘,
‘type‘:‘POST‘,
async:false,
dataType:‘json‘,
success: function(data){
if(data && data.success) {
window.open(‘http://www.baidu.com‘);
}
}
});
});

设置同步的请求就可以实现了,(async:false)
。大家都可以测试下!

JS 点击元素发ajax请求 打开一个新窗口,布布扣,bubuko.com

时间: 2024-12-22 17:40:22

JS 点击元素发ajax请求 打开一个新窗口的相关文章

[小白知识记录]--浏览器打开一个新窗口记录

很小白的一个知识点:想在浏览器中点击按钮后,弹出一个单独的窗口.如有的页面显示一个概要信息,用户点击某个按钮后弹出一个窗口显示详细的信息.方法是js的window.open方法:window.open(URL,target,features,replace) 参数 描述 URL 一个可选的字符串,声明了要在新窗口中显示的文档的 URL.如果省略了这个参数,或者它的值是空字符串,那么新窗口就不会显示任何文档. target 一个可选的字符串,该字符串是一个由逗号分隔的特征列表,可以包括数字.字母和

ajax请求成功后新窗口window.open()被拦截的解决方法

ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限制),即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以被拦截. 解决方法: 1.异步改为同步,即:async:false 2.将新开窗口指向为一个对象,然后修改对象的 ur

N 秒打开一个新窗口

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><h

Window.open 实现导航与打开窗口,导航到一个特定链接地址,也可以打开一个新的浏览器窗体

语法 window.open(strUrl,strWindowName,strWindowFeatures ,replace) strUrl: 打开资源的地址 strWindowName: 表示窗体名称.如果该参数指定了一个已经存在的窗口,那么open()方法就不再创建一个新窗口,而只返回对指定窗口的引用.在这样情况下 fratures 将被忽略. strWindowFeatures :新窗口要显示的标准浏览器的特征 replace: 一个可选的布尔值.规定了装载到窗口的 URL 是在窗口的浏览

【jquery】ajax 请求成功后新开窗口被拦截解决方法

问题: 前面开发项目时碰到一个问题,ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是很可惜被浏览器给拦截了,怎么解决这个问题呢? 分析: 浏览器之所以拦截新开窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限制),即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所

jquery如何在li元素列表的开头添加一个新li元素

jquery如何在li元素列表的开头添加一个新li元素:本章节介绍一下如何在li元素列表的开头添加一个li元素,大家最为习惯的是使用append()函数在li元素列表后面追加一个新的li元素,下面就通过代码实例介绍一下如何实现在前面添加一个新的li元素.代码如下: <!DOCTYPE html><html> <head> <meta charset=" utf-8"> <meta name="author" co

使用javascript打开一个新页而不被浏览器屏蔽

使用javascript打开一个新页面可以有几种方式,但各有利弊,以下做下分析 1.window.open(url) 这是新手最常用的方法,好处是简单易用,坏处,很简单,会被很多浏览器拦截而导致功能失效 2.使用js在页面创建一个a标签,然后点击它 示例代码如下: var a = document.getElementById("entergameform1001"); if(!a){ $(document.body).append('<a id="entergamef

VirtualBox加载虚拟光驱遇到的错误,不能为虚拟电脑 centos7 打开一个新任务.win7 64位主题原文件

不能为虚拟电脑 centos7 打开一个新任务. Unable to load R3 module C:\Program Files\Oracle\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastError=1790 (VERR_UNRESOLVED_ERROR). 返回 代码:E_FAIL (0x80004005) 组件:Console 界面:IConsole {8ab7c520-2442-4b66-8d74-4ff1e195d2b6 遇到这个错误后,百度说是因为

不能为虚拟电脑 Kali-Linux-2019.2 打开一个新任务

Oracle VM VirtualBox安装心得 最近在安装Oracle VM VirtualBox 报错"不能为虚拟电脑 Kali-Linux-2019.2 打开一个新任务." Implementation of the USB 2.0 controller not found! Because the USB 2.0 controller state is part of the saved VM state, the VM cannot be started. To fix th