• js如何把ajax获取的值返回到上层函数里?
  • 发布于 1个月前
  • 34 热度
    0 评论
  • AUX
  • 7 粉丝 34 篇博客
  •   

我现在有个系统在用户点击浏览时,系统会以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;//返回值
}

用户评论