以下代码,从服务器端得到一个计算过的URL,然后打开新页面。
$("#btn_ok").click(function() {
var entry_id = $("#entry_id").val();
var url= "{% url 'zinnia:entry_reward'%}";
var amount = 5;
if($("input[name='radio_award']:checked").val() =="0")
amount = $("#option_amount").val();
else
amount = $("#custom_award").val();
var post_data = {'entry_pk': entry_id, 'amount': amount};
$.post(url,
post_data,
function(data) {
if (data.status) {
window.open(data.url);
}
else
{
alert("赞赏未成功。"+data.message);
$('#myModal').modal('hide'); // 关闭模态窗口
}
});
实际上会被 猎豹等浏览器阻挡。
原因是: jquery的异步调用,使得window.open新开页面没有被信任的上下文。设置$.ajax的async为false,可以解决,但会block当前窗口。
stackoverflow有人提出更好的解决办法。
建立一个空白window,再把新的url赋值给它。
var window_0 = window.open('');
...
window_0.location = data.url;
比较完美解决。