Javascript Can';t单击取消按钮停止ajax调用

Javascript Can';t单击取消按钮停止ajax调用,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个jQuery脚本。其概念是,当我单击一个按钮时,它首先调用一个AJAX函数来计算特定查询中的行数。然后在成功调用时,它将行数存储在jQuery变量中 然后它调用一个AJAX函数,该函数重复运行,每次从服务器调用10行数据,在这个过程中,每当从数据库中提取一些数据时,就会有一个进度条逐渐增加或填充。当接收到一块数据时,它会被推送到一个全局数组中。当最后一个ajax调用返回空编号或行时,进程终止 此外,还有一个按钮与进度加载器一起,当单击该按钮时,将终止AJAX进程以停止调用,并在数据表中显

我有一个jQuery脚本。其概念是,当我单击一个按钮时,它首先调用一个AJAX函数来计算特定查询中的行数。然后在成功调用时,它将行数存储在jQuery变量中

然后它调用一个AJAX函数,该函数重复运行,每次从服务器调用10行数据,在这个过程中,每当从数据库中提取一些数据时,就会有一个进度条逐渐增加或填充。当接收到一块数据时,它会被推送到一个全局数组中。当最后一个ajax调用返回空编号或行时,进程终止

此外,还有一个按钮与进度加载器一起,当单击该按钮时,将终止AJAX进程以停止调用,并在数据表中显示到目前为止接收到的数据

这是我的剧本

<script type="text/javascript">
var oTable;
var outer_start_row = 0;
var outer_limit = 1;
var final_data = []; 
var cancel = false;
var total_data = 0;
$(document).ready(function() {
    window.prettyPrint() && prettyPrint();
    $('#load').click(function()
    {
        var v = $('#drp_v').val();
        var cnt = $('#drp_cnt').val();
        var ctg = $('#drp_ctg').val();
        var api = $('#drp_api').val();
        var nt = $('#drp_nt').val();
        alert("version :"+v+" category :"+ctg+" country :"+cnt);
        $.post("ajax.php",
                {   
                    'version':v,'category':ctg,
                    'country':cnt,'network_id':nt,
                    'api':api,'func':'total_data'
                },
                function(data)
                {
                    total_data = data;
                    $("#progress_bar_container").fadeIn('fast');
                });

        load_data_in_datatable();
    });
});

function stop_it()
{
    cancel == true;
}


function load_data_in_datatable()
{
        if(cancel == true) 
        {
            alert(cancel);
            return;
        }   
        else
        {
        var v = $('#drp_v').val();
        var cnt = $('#drp_cnt').val();
        var ctg = $('#drp_ctg').val();
        var api = $('#drp_api').val();
        var nt = $('#drp_nt').val();
        $.post("ajax.php",
                {   
                'version':v,'category':ctg,
                'country':cnt,'network_id':nt,
                'api':api,'func':'show_datatable',
                'start_row':outer_start_row,'limit':outer_limit
                },
                function(response)
                {
                    var data = response.data;
                    var limits = response.limits;
                    outer_limit = limits.limit;
                    outer_start_row = limits.start_row;
                    if(data.length > 0)
                    {
                        for(var i = 0; i < data.length; i++) 
                        {
                            final_data.push(data[i]);
                        }
                        var current = parseInt(final_data.length);
                        percent_load = Math.round((current/parseInt(total_data))*100);
                        $(".progress-bar").css("width",percent_load+"%");
                        $(".progress-bar").text(percent_load+"%");
                        load_data_in_datatable();
                    }
                    else
                    {
                        create_datatable();
                        cancel = true;
                        return;
                    }
                },'json');
        }       
}

function create_datatable()
{
    $("#progress_bar_container").fadeOut('fast');
    var aColumns = [];
    var columns = [];
    for(var i = 0; i < final_data.length; i++) 
    {
        if(i>0)
            break;
        keycolumns = Object.keys(final_data[i]); 
        for(j = 0; j < keycolumns.length; j++)
        {
            if($.inArray(keycolumns[j],aColumns.sTitle)<=0)
            {
                aColumns.push({sTitle: keycolumns[j]}) //Checks if
                columns.push(keycolumns[j]) //Checks if
            }                                  
        }

    }

    var oTable = $('#jsontable').dataTable({
        "columns":aColumns,
        "sDom": 'T<"clear">lfrtip',
            "oTableTools": {
                "aButtons": [
                    {
                            "sExtends": "csv",
                            "sButtonText": "CSV",
                     }
                ]
            }
    });
    oTable.fnClearTable();
    var row = []
    for(var i = 0; i < final_data.length; i++) 
    {
        for(var c = 0; c < columns.length; c++) 
        {
                row.push( final_data[i][columns[c]] ) ;
        }
        oTable.fnAddData(row);
        row = [];
    }
}
</script>

可变的;
var outer\u start\u row=0;
var外部_极限=1;
var最终数据=[];
var cancel=false;
var总数据=0;
$(文档).ready(函数(){
window.prettyPrint()&&prettyPrint();
$('#加载')。单击(函数()
{
var v=$('#drp_v').val();
var cnt=$('#drp_cnt').val();
var ctg=$('drp#u ctg').val();
var api=$('#drp_api').val();
var nt=$('drp_nt').val();
警报(“版本:“+v+”类别:“+ctg+”国家:“+cnt”);
$.post(“ajax.php”,
{   
“版本”:v,“类别”:ctg,
“国家”:cnt,“网络id”:nt,
“api”:api,“func”:“总数据”
},
功能(数据)
{
总数据=数据;
$(“进度条容器”).fadeIn('fast');
});
在_datatable()中加载_data_;
});
});
函数stop_it()
{
cancel==true;
}
函数加载\u数据表()中的\u数据
{
如果(取消==真)
{
警报(取消);
返回;
}   
其他的
{
var v=$('#drp_v').val();
var cnt=$('#drp_cnt').val();
var ctg=$('drp#u ctg').val();
var api=$('#drp_api').val();
var nt=$('drp_nt').val();
$.post(“ajax.php”,
{   
“版本”:v,“类别”:ctg,
“国家”:cnt,“网络id”:nt,
'api':api,'func':'show_datatable',
“开始行”:外部开始行,“限制”:外部限制
},
功能(响应)
{
var数据=响应数据;
var限值=响应限值;
外部极限=极限。极限;
外部开始行=限制。开始行;
如果(data.length>0)
{
对于(变量i=0;i0)
打破
keycolumns=Object.keys(最终_数据[i]);
对于(j=0;jif($.inArray(keycolumns[j],aColumns.sTitle)检查链接,描述如何中止(停止/取消)ajax请求

Jquery允许您使用.abort()方法停止ajax请求

此函数似乎有误,您需要将true赋值给cancel变量,但您错误地编写了比较运算符(等于/=),它应该是:

function stop_it() {
    cancel = true;
}

我认为您在进程之间停止AJAX时调用了此函数。

您刚刚给我发送了一个链接……我知道如何中止……我想知道它的工作原理,但您没有在问题中提到您知道的.abort()函数。您问我您想停止AJAX。请检查您的问题。
function stop_it() {
    cancel = true;
}