当ajax调用相同的函数被连续调用时,需要ajax的帮助

need help on ajax when same function with ajax call is called continuously

本文关键字:调用 ajax 帮助 连续 需要 函数      更新时间:2023-09-26

我需要ajax的帮助,因为我是新的。当同一个ajax调用在ajax调用完成执行之前被多次调用时,它会在ui上弹出空的弹出框。我怎样才能解决这个问题?实际上当用户点击下载链接时,代码是在ajax的成功函数中编写的。但是如果用户在下载第一个之前多次点击下载链接。抛出错误。我该如何解决这个问题?

这是我的代码

function clickLink(section) {
    $.ajax({
        type: "POST",
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        dataType: 'text',
        url: 'MyService.asmx/getMetrics',
        data: { programName: progName, startYear: beginYear, endYear: endYear, userName: spnUserName.innerHTML, rdate:dt },
        success: function (data) {
            var jdata = data;
            jdata = jdata.replace(/<'/?[a-z][a-z0-9]*[^<>]*>/ig, "");
            jdata = jdata.replace('<?xml version="1.0" encoding="utf-8"?>', '');
            jdata = jdata.replace(''r'n', '');        
            var link = document.createElement("a");           
            link.setAttribute('href', jdata.trim());
            link.onclick = OpenFile(jdata.trim());
        },
        error: function (xhr, textStatus, errorThrown) {
            alert(errorThrown);
        }
    });
}

可以设置一个临时类

$('.your-element:not(.disabled)').click(function(){
    var $this = $(this);
    $this.addClass('disabled');
    $.ajax({
        type: "POST",
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        dataType: 'text',
        url: 'MyService.asmx/getMetrics',
        data: { programName: progName, startYear: beginYear, endYear: endYear, userName: spnUserName.innerHTML, rdate:dt },
        success: function (data) {
            var jdata = data;
            jdata = jdata.replace(/<'/?[a-z][a-z0-9]*[^<>]*>/ig, "");
            jdata = jdata.replace('<?xml version="1.0" encoding="utf-8"?>', '');
            jdata = jdata.replace(''r'n', '');        
            var link = document.createElement("a");           
            link.setAttribute('href', jdata.trim());
            link.onclick = OpenFile(jdata.trim());
        },
        error: function (xhr, textStatus, errorThrown) {
            alert(errorThrown);
        }
    }).done(function(){
       $this.removeClass('disabled');
    });
    return false;
});

将ajax函数声明为变量,然后使用函数并检查变量是否定义:

var xhr;
function CallAjax(){
    if( xhr !== undefined ) return false;
    xhr = $.ajax({
        type: "POST",
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        dataType: 'text',
        url: 'MyService.asmx/getMetrics',
        data: { programName: progName, startYear: beginYear, endYear: endYear, userName: spnUserName.innerHTML, rdate:dt },
        success: function (data) {
            var jdata = data;
            jdata = jdata.replace(/<'/?[a-z][a-z0-9]*[^<>]*>/ig, "");
            jdata = jdata.replace('<?xml version="1.0" encoding="utf-8"?>', '');
            jdata = jdata.replace(''r'n', '');        
            var link = document.createElement("a");           
            link.setAttribute('href', jdata.trim());
            link.onclick = OpenFile(jdata.trim());
        },
        error: function (xhr, textStatus, errorThrown) {
            alert(errorThrown);
        }
    });
}