我现在有个系统在用户点击浏览时,系统会以ajax的方式从后台获取查看的链接,并以window.open的方式打开,但因为现在多数的浏览器都会拦截window.open打开的地址,而window.location.href的方式又无法在浏览器新窗口打开,所以我现在只能通过在前台页面的onclick函数中实现window.open(使用该方式,浏览器不会拦截),我原来的代码是如下这样的:
function GetViewUrl(bookID, $, layer, siteURL) {$.ajax({type: "post",data: { 'BookID': bookID },datatype: "text/json",scriptCharset: 'utf-8',url: siteURL 'Parts/GetViewUrl',success: function (year) {if ($.trim(year) != '') {var defalutFileName = bookID '.html';url = siteURL 'Parts/ViewItem/' year '/' bookID '/' defalutFileName;window.open(url);}},error: function () {}});}
我现在想修改该段代码,让这个函数返回url,可以给外部的函数调用,这段代码要怎么改?其实很简单:只要修改三个地方: 1.在该段代码新增一个全局返回的变量
2.把该段ajax调用的方式改为非异步,也就是新增一个 async: false,
3.在最后返回定义的全局变量
代码如下:
function GetViewUrl(bookID, $, layer, siteURL) {
var url = '';//定义要返回给外部函数的值
$.ajax({
async: false,//这一步非常重要
type: "post",
data: { 'BookID': bookID },
datatype: "text/json",
scriptCharset: 'utf-8',
url: siteURL 'Parts/GetViewUrl',
success: function (year) {
if ($.trim(year) != '') {
var defalutFileName = bookID '.html';
url = siteURL 'Parts/ViewItem/' year '/' bookID '/' defalutFileName;//从服务器获取值
}
},
error: function () {
}
});
return url;//返回值
}