Angularjs: цикл $ http.post

1

script.js

for(var i = 0;i<$scope.data_acc_lv.length;i++)
        {
            var input3 = {
                "_id": $scope.accLvID + i,
                "acc_id":$scope.accLvID,
                "name": $scope.data_acc_lv[i].names,
                "read": $scope.data_acc_lv[i].read,
                "execute": $scope.data_acc_lv[i].execute,
            }
            $http.post("http://localhost:1234/access_menu",input3)
            .success(function(res){
                if(res.error == 0)
                {

                }

            });
        } 

script.js

app.post('/access_menu',function(req,res){
    var IDMenu = req.body._id;
    var Forein = req.body.acc_id;
    var Name = req.body.name;
    var Read = req.body.read;
    var Execute = req.body.execute;

    var data = {"error":1,"Access_menu":""};
    if(!!Name && !!Read && !!Execute)
    {
        db.collection("access_menu").insert({_id:IDMenu,acc_id:Forein,name:Name,read:Read,execute:Execute},function(err,req){
            if(!!err)
            {
                data['Acess_menu'] = "input error";
            }
            else
            {
                data['error'] = 0;
                data['Access_menu'] = "input berhasil"
            }
            res.json(data);
        });
        data = {"error":1,"Access_menu":""};
    }
});

поэтому я пытаюсь ввести данные из таблицы в базу данных, но всегда получал значение из последнего индекса (все предыдущие значения заменяются на последнее значение индекса), поэтому в чем причина проблемы. спасибо

  • 0
    Ваш пример неясен, можете ли вы предоставить plunker pls? Или ваш угловой код привязанный к данным и HTML. .success устарел метод $http .
  • 0
    как @Kindzoku сказал, что вы должны использовать .then().catch() . Что находится в $scope.accLvID ?
Показать ещё 2 комментария
Теги:

2 ответа

0
Лучший ответ

Вы можете обернуть код внутри цикла for в сразу вызываемой функции

     (function( i ) {
        var input3 = {
            "_id": $scope.accLvID + i,
            "acc_id":$scope.accLvID,
            "name": $scope.data_acc_lv[i].names,
            "read": $scope.data_acc_lv[i].read,
            "execute": $scope.data_acc_lv[i].execute,
        }
        $http.post("http://localhost:1234/access_menu",input3)
        .success(function(res){
            if(res.error == 0)
            {

            }

        });

      })(i);

Надеюсь это поможет.

  • 0
    Он может многое сделать, но зачем? :)
  • 0
    спасибо за вашу помощь, сэр
0
var temp = [];
for(var i = 0;i<$scope.data_acc_lv.length;i++){
       var input3 = {
          "_id": $scope.accLvID + i,
          "acc_id":$scope.accLvID,
          "name": $scope.data_acc_lv[i].names,
          "read": $scope.data_acc_lv[i].read,
          "execute": $scope.data_acc_lv[i].execute,
          }
         temp.push(input3)
} 
$http.post("http://localhost:1234/access_menu",temp )
        .success(function(res){
            if(res.error == 0)
            {

            }

        });

почему бы просто не форматировать массив, а затем отправить весь массив на столбе, а затем зациклиться на вашем скрипте.js?

  • 1
    Ну, почему бы не использовать Array.map (), чем? $scope.data_acc_lv.map(function(item, index){ return { '_id: item.'... }; });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню