Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS HTTP post调用通过for循环_Javascript_Angularjs_For Loop_Http Post - Fatal编程技术网

Javascript AngularJS HTTP post调用通过for循环

Javascript AngularJS HTTP post调用通过for循环,javascript,angularjs,for-loop,http-post,Javascript,Angularjs,For Loop,Http Post,我有一个数组,我正在传递给一个将被发布到API的有效负载。数组中的字段名是API将单独获取的(而不是作为数组),因此我创建了一个for循环来迭代数组,并将字段名动态添加到有效负载中。但当我进行调用时,我只获取最后一个字段名的数据。如果我说数组中总共有6项,那么我只得到最后一个字段的数据 function getData(payload, index, field) { var deferred = $q.defer(); for (var i = 0; i

我有一个数组,我正在传递给一个将被发布到API的有效负载。数组中的字段名是API将单独获取的(而不是作为数组),因此我创建了一个for循环来迭代数组,并将字段名动态添加到有效负载中。但当我进行调用时,我只获取最后一个字段名的数据。如果我说数组中总共有6项,那么我只得到最后一个字段的数据

function getData(payload, index, field) {

        var deferred = $q.defer();


        for (var i = 0; i < field.length; i++) {
            if (field[i]) {

                console.log("terms logged", field[i]);

                var termsData = {
                    user_selection: payload,
                    index_info: index,
                    field: field[i]
                };

                console.log("terms data", termsData);

            } 
          }
                $http({
                    url: 'API',
                    method: "POST",
                    data: $.param(termsData),
                    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
                }).then(function (response) {
                    var data = response.data;

                    console.log("response data", data);

                    deferred.resolve(data);
                });

                return deferred.promise;    
    }
函数getData(有效负载、索引、字段){ var deferred=$q.deferred(); 对于(变量i=0;i
我需要在第一次呼叫后重复循环吗?因为它在for循环中,所以我假设调用将一个接一个地进行,直到满足条件。

我相信您正在寻找的是一种在循环中链接承诺的方法。这可以通过在阵列中存储承诺来实现,如下所示:

var promises = [];
for(...) {
    var promise = $http(...); // http calls return a promise
    promises.push(promise);

    // Or, if you prefer to use $q
    var deferred = $q.defer();
    $http(...).success(function(){
        deferred.resolve();
    });
    promises.push(deferred);
}

$q.all(promises).then(function(){
    // This will be executed when all promises inside the array have been resolved
});
尽管如此,我不建议做这么多的请求。如果可能,请更改后端,使其能够交替接收对象数组

这里有一些关于$q$q的文档


我相信您正在寻找的是一种在循环中链接承诺的方法。这可以通过在阵列中存储承诺来实现,如下所示:

var promises = [];
for(...) {
    var promise = $http(...); // http calls return a promise
    promises.push(promise);

    // Or, if you prefer to use $q
    var deferred = $q.defer();
    $http(...).success(function(){
        deferred.resolve();
    });
    promises.push(deferred);
}

$q.all(promises).then(function(){
    // This will be executed when all promises inside the array have been resolved
});
尽管如此,我不建议做这么多的请求。如果可能,请更改后端,使其能够交替接收对象数组

这里有一些关于$q$q的文档


这里有几个错误。首先,返回deferred.promise将在第一次到达该函数时中断。这就是为什么它只发送第一个学期。如果将return语句移到for循环之外,则应发送所有术语

还应该修复的是,您只有一个延迟对象连接到多个调用。每个调用都应该有一个延迟对象。下面是一个例子

函数getData(有效负载、索引、字段){ 对于(变量i=0;i}这里有几个错误。首先,返回deferred.promise将在第一次到达该函数时中断。这就是为什么它只发送第一个学期。如果将return语句移到for循环之外,则应发送所有术语

还应该修复的是,您只有一个延迟对象连接到多个调用。每个调用都应该有一个延迟对象。下面是一个例子

函数getData(有效负载、索引、字段){ 对于(变量i=0;i}您的问题不清楚。你们能解释一下你们的问题吗?除了有效载荷和索引作为参数外,我还传递了一个字段,它是一个数组,我需要对数组中的每一项进行http post调用…所以若我在字段中有6项,我会进行6次调用…你们的问题不清楚。你们能解释一下你们的问题吗?除了有效载荷和索引作为参数外,我还传递了一个数组字段,我需要对数组中的每个项目进行http post调用…所以若我在字段中有6个项目,我会进行6次调用…太棒了!这正如预期的那样工作,虽然现在在我的控制器中,我得到了一个“无法读取未定义的'then'属性”…我以前在另一个电话中遇到过这个问题,但我没有正确地解决承诺,所以使用$q服务有帮助…有没有关于为什么会出现这个错误的想法?真棒的人!这正如预期的那样工作,虽然现在在我的控制器中,我得到了一个“无法读取未定义的'then'属性”…我以前在另一个调用中遇到过这个问题,但我没有正确地解决承诺,因此使用$q服务有帮助…有没有想过为什么会出现这个错误?