JavaScript: HTTP-вызов внутри вложенного цикла

0

В моем угловом приложении у меня есть два массива, как показано ниже:

$scope.data = ["val 10,val 11,val 12", "val 20,val 21,val 22", "val 30,val 31,val 32"];

$scope.fields = [ "key1", "key2", "key3" ];

И теперь мне нужно отправить данные массива ($scope.data) на сервер в следующем формате:

{
  key1: 'val 10',
  key2: 'val 11',
  key2: 'val 12',
}
{
  key1: 'val 20',
  key2: 'val 21',
  key2: 'val 22',
}
{
  key1: 'val 30',
  key2: 'val 31',
  key2: 'val 32',
}  

Но проблема в том, что когда я отправляю данные на сервер, я получаю только последнее значение $scope.data. Мой код приведен ниже:

// $scope.data = ["val 10,val 11,val 12", "val 20,val 21,val 22", "val 30,val 31,val 32"];
_.each($scope.data, function(result, index) {

  var dataArray = result.split(",");  // ["val 10" ,"val 11", "val 12"]
                                      // ["val 20" ,"val 21", "val 22"]
                                      // ["val 30" ,"val 31", "val 32"]

  _.each(dataArray, function(info, position) {

    if( info !== null || info !== '' || info.length > 0 )  {
      $scope.data[ $scope.fields[position] ] = info;   // { key1: 'val 10', key2: 'val 11', key2: 'val 12' }                                                        
                                                      //  { key1: 'val 20', key2: 'val 21', key2: 'val 22' }
                                                      //  { key1: 'val 30', key2: 'val 31', key2: 'val 32' }
    }
  });

  $http
    .post(url + '/import-data', {
      "data": $scope.data
    })
    .then(function (res) {
      console.log(res);  // in server I always get the following object
                         //  { key1: 'val 30', key2: 'val 31', key2: 'val 32' }
                         //  { key1: 'val 30', key2: 'val 31', key2: 'val 32' }
                         //  { key1: 'val 30', key2: 'val 31', key2: 'val 32' }
    }, function (error) {
      console.log("error : ", error);
    })

});

Как я могу решить эту проблему? Заранее спасибо...

Теги:
underscore.js

2 ответа

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

попробуй это:

_.each($scope.data, function(result, index) {

    var dataArray = result.split(","); 

    $http
       .post(url + '/import-data', {
            "data": _.object( $scope.fields, dataArray)
       })
      .then(function (res) {
          console.log(res); 
       }, function (error) {
          console.log("error : ", error);
       })

  });
1

Я создал новую переменную с именем $scope.serverdata для вас. Передайте это серверу.

$scope.data = ["val 10,val 11,val 12", "val 20,val 21,val 22", "val 30,val 31,val 32"];
 $scope.fields = ["key1", "key2", "key3"];
 $scope.serverdata = [];
 angular.forEach($scope.data, function(result) {
     var dataArray = result.split(",");

     var value = {};
     angular.forEach($scope.fields, function(field, index) {
         if (value[field] == undefined) {
             value[field] = dataArray[index];
         };

     });
     $scope.serverdata.push(value);
 });
 });

$scope.serverdata теперь выглядит

{
  key1: 'val 10',
  key2: 'val 11',
  key3: 'val 12',
}
{
  key1: 'val 20',
  key2: 'val 21',
  key3: 'val 22',
}
{
  key1: 'val 30',
  key2: 'val 31',
  key3: 'val 32',
}  

Вот ссылка на скрипку

http://fiddle.jshell.net/LXAt7/655/

И позвоните с

$http
    .post(url + '/import-data', {
      "data": $scope.serverdata
    })
    .then(function (res) {
      console.log(res); 
    }, function (error) {
      console.log("error : ", error);
    })
Сообщество Overcoder
Наверх
Меню