Javascript 错误数组Ajax承诺使用“when”

Javascript 错误数组Ajax承诺使用“when”,javascript,jquery,ajax,Javascript,Jquery,Ajax,我在使用几个ajax调用时出错,我把它放在一个数组中,完成所有调用后需要捕获。 我的代码是: var userId=[1,2,3]; var ajaxR = []; for (var us in userId) { var usId = userId[us]; ajaxR.push($.ajax({ type: "GET", async: true, contentType: "application/json; charset=u

我在使用几个ajax调用时出错,我把它放在一个数组中,完成所有调用后需要捕获。 我的代码是:

var userId=[1,2,3];
var ajaxR = [];
for (var us in userId) {
    var usId = userId[us];
    ajaxR.push($.ajax({
        type: "GET",
        async: true,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        url: "myurl",
        data: { id: usId }   
    }));
}
$.when.apply($, ajaxR).always(function (e) {
    //Here I have the error but arguments it's ok
    var objects = arguments;      
});
当我删除此代码时,$中有一个错误。当函数:

Uncaught TypeError: Cannot read property '0' of undefined
更新:

我的全部功能是:

 function UserFromWS(userId) {
        var users = [];
        var ajaxR = [];
        for (var us in userId) {
            var usId = userId[us];
            ajaxR.push($.ajax({
                type: "GET",
                async: true,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                url:  "url",
                data: { id: usId }   
            }));
        }
        $.when.apply($, ajaxR).always(function (e) {
            var obj = arguments;
            return obj;
        }); 
        // return users;
    }
如果我放置返回用户,则错误消失;在功能结束时。但在返回obj之前,它会将users数组返回为空。我需要以这种方式调用函数:

var allUsers = UserFromWS ([1,2,3]);

函数应该以$为单位返回obj。当承诺时。

首先要检查的是userId是否作为数组传递。然后需要修改for循环以正确循环数组

函数还需要返回一个承诺:

 function UserFromWS(userId) {
        var users = [];
        var ajaxR = [];
        for (var i = 0; i< userId.length; i++) {
            var usId = userId[i];
            ajaxR.push($.ajax({
                type: "GET",
                async: true,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                url:  "url",
                data: { id: usId }   
            }));
        }
        return $.when.apply($, ajaxR).done(function (e) {
            var obj = arguments;
            return obj;
        }); 
        // return users;
    }

为什么要保存对数组的ajax调用,JQuery可以自己识别请求,并且可以多次调用相同的$.ajax而不会出错

例如:

       $.ajax({
            type: "GET",
            async: true,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            url:  "url",
            data: { id: usId }   
        }).done(function (e) {
        var obj = arguments;
        return obj;
    });
或者,如果您想继续使用您的系统,请知道当使用承诺时
请参阅console.logarguments为您提供了什么?var userId=[1,2,3;]这是无效的。在ES5中,您不能使用来循环数组。该错误的堆栈跟踪是什么?var userId=[1,2,3;]是键入错误。这不是问题所在,我从其他函数中获得了具有正确int值的userId数组。请查看错误。”参数“有0个数组非对象响应,1个文本=成功,2个对象承诺谢谢,你告诉我循环中有一个很好的提示:我应用它,但这并不能解决问题,只是提高了性能。变量userId没关系,我只是用一个值进行测试。var user=[10];我调用函数var userInfo=UserFromWSuser;但是我有一个错误。你能不能控制台。loguserId;在第一行检查正在传递的内容?您还可以确定代码中的哪一行是导致问题的原因吗?使用console.logsomething查找在错误更新我的awnser之前日志记录何时停止,因为您似乎没有等待UserFromWSI与google chrome解除bug的结果。userId有一个10的数组,循环usId有10个值,所有这些都可以,调用代码并返回正确的值。当函数完成并在`$.when.apply$,ajaxR.alwaysfunction e中继续时,会出现此错误{`如果我在var objects=arguments中设置断点;我认为错误在于函数的生成方式和异步值的返回方式。再次使用最新编辑,请在何时使用“完成”回调。感谢您的回答Zakaria,但我需要从多个用户处获取用户信息,如果我从每个用户处调用同步函数,则需要更多的时间,如果我调用了大量的异步函数,并在
       $.ajax({
            type: "GET",
            async: true,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            url:  "url",
            data: { id: usId }   
        }).done(function (e) {
        var obj = arguments;
        return obj;
    });