Javascript 数组为空我想访问数组arrcolumn[]

Javascript 数组为空我想访问数组arrcolumn[],javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我想访问我声明为全局数组的数组arrcolumn[]。我正在OnSuccess1()函数中将值初始化为数组arrcolumn[]。在OnSuccess1()中初始化后,我想使用arrcolumn[]函数中的值。 但是OnSuccess()函数中的arrcolumn[]为空 var arrname = []; var arrmark = []; var arrcolumn = []; var arr = []; var arr1 = []; //display function function

我想访问我声明为全局数组的数组
arrcolumn[]
。我正在
OnSuccess1()
函数中将值初始化为数组
arrcolumn[]
。在OnSuccess1()中初始化后,我想使用
arrcolumn[]
函数中的值。 但是
OnSuccess()
函数中的
arrcolumn[]
为空

var arrname = [];
var arrmark = [];
var arrcolumn = [];
var arr = [];
var arr1 = [];
//display function
function display() {
    $.ajax({
        type: "POST",
        url: "Default.aspx/fetchStudent",
        data: '{}',
        contentType: "application/json;charset=utf-8",
        dataType: "json",
        success: OnSuccess,
        error: OnErrorCall
    });
    $.ajax({
        type: "POST",
        url: "Default.aspx/fetchcolumn",
        data: '{}',
        contentType: "application/json;charset=utf-8",
        dataType: "json",
        success: OnSuccess1,
        error: OnErrorCall1
    });

    function OnSuccess1(response) {

        var objdata1 = (response.d);
        var pm1 = JSON.parse(objdata1);
        var len1 = objdata1.length;
        arr1 = $.map(pm1, function(n, i) {
            var arr_temp1 = {
                0: n.name


            }
            arrcolumn[i] = n.name;


            return arr_temp1;

        });



        arrcolumn = jQuery.grep(arrcolumn, function(value) {
            return value != removeItem;

        });
        arrcolumn = jQuery.grep(arrcolumn, function(value) {
            return value != removeItem1;

        });

        alert(arrcolumn);
    }

    function OnErrorCall1(response) {
        alert("unable to fecth");
    }

    function OnSuccess(response) {

        var objdata = (response.d);
        var pm = JSON.parse(objdata);
        var len = objdata.length;
        arr = $.map(pm, function(n, i) {
            var arr_temp = {
                0: n.name1,
                1: n.os,
                2: n.cn,
                3: n.pns,
                4: n.dbms,
                5: n.se,
                6: n.c

            }
            arrname[i] = n.name1;
            arrmark[i] = [n.os, n.cn, n.pns, n.dbms, n.se, n.c];

            return arr_temp;

        });
        //alert(arrcolumn);
        alert(arrname);
        alert(arrmark);
    }

    function OnErrorCall(response) {

        alert("error occured");
    }
}

您不能保证在
OnSuccess
之后调用
OnSuccess 1
。如果在完成工作之前需要这两条信息,则需要等待两个调用完成

一种简单的方法是jQuery:


调用将并行运行,但在两个调用完成之前,最后的处理程序不会运行。

这段代码和问题很难理解,特别是因为您使用了类似的压缩变量名。你想达到什么目标?您能否给出一个简单的格式化示例,说明哪些有效,哪些无效?也许您的
OnSuccess1
是在
OnSuccess
之前执行的?Ajax是异步的,需要花费不同的时间来完成。你不能保证哪一个先完成,把它们串联起来(啊!如果你在第一句中看到“before”而不是“after”,点击refresh。)你为什么不把这个问题重复给@Gothdo:我不认为这是重复的。这很可能是
$的其他东西的复制品。当
承诺时。所有的
都是答案,但OP显然是在等待回调后才开始工作。他们只是没有意识到回调可能不正常。我读完了前三页,就放弃了。
$.when(
    $.ajax(/*...*/), // The first call
    $.ajax(/*...*/)  // The second call
).then(function(result1, result2) {
    // Both calls are done now. Use `result1` (the result of the
    // first call) and `result2` (the result of the second) here
});