Redux如何在ajax完成后打开一个新窗口
Redux how to open a new window after ajax complete
这是我的问题:
我在表单上有一个保存按钮。当点击保存按钮时,它应该通过ajax发送表单数据。ajax调用成功后,应打开一个新窗口。
我遇到的问题是(我使用的是React+Redux):
//inside the component class
handleSubmit = (e) => {
this.props.dispatch( // calls ajax )
}
//inside the ajax action
dispatch => {
fetch(...).then(response => {
if (res.status >= 200 && res.status < 300) {
window.open(...)
}
})
}
将window.open()
放入ajax调用中的问题是,新窗口将被视为弹出窗口,被chrome和FF阻止
我想我应该把window.open()
放在handleSubmit
里面,以防止浏览器阻止它。但我如何确定dispatch
是否在handleSubmit
里面成功完成?或者还有其他地方可以让我呼叫window.open()
而不会被屏蔽吗?
调度另一个触发窗口的操作。一旦promise命中.then()
,AJAX请求就完成了,因为promise现在得到了解决。
function openWindow(someData) {
const url = someData.url;
window.open(url);
return { type: 'SOME_ACTION_TO_TAKE' };
}
export function someAction() {
let endpoint = 'http://localhost:8000/myEndpoint/';
return dispatch => {
return Axios.post(endpoint)
.then(response => response.data)
.then(json => dispatch(openWindow(json)))
.catch((err) => { //Do whatever to error here });
};
}
相关文章:
- 用javascript将数据从一个窗口传递到另一个窗口
- 创建一个方法,通过一个窗口进行迭代并获取Titanium中的所有控件
- 从另一个窗口访问document.getElementById
- notify.js没有'如果另一个窗口被聚焦,则不显示通知
- 使用YUI或ExtJS将隐藏的DIV变成一个窗口
- 从另一个窗口对链接触发单击事件
- Atom Electron:在另一个窗口中渲染画布
- 使用Javascript单击选择按钮时,在另一个窗口上显示图像
- Javascript/Jquery如何在另一个窗口中检测点击
- 用JavaScript打开一个新窗口,然后关闭前一个窗口
- 使用Javascript/jQuery在当前窗口后面打开一个窗口
- 从另一个窗口调用 iframe
- 在系统焦点使用Electron的地方打开一个窗口
- 将图像数组从一个窗口传递到另一个窗口,并在javascript的新窗口中显示图像
- 一键在一个窗口中打开两个不同的链接图像
- IE10在打开窗口并再次打开另一个窗口时不起作用
- 你怎么知道javascript是否无法打开一个窗口
- 使用 javascript 打开一个窗口,并从外部源加载 HTML 内容
- 仅在一个窗口中播放声音,该窗口使用javascript(可能是jquery)处于活动状态(在一个网站内)
- 用钛将一个窗口移动到另一个窗口