Предотвращать двойную порцию click ajax

они знают: как избегать того, чтобы они дважды щелкнули, послав данные в ajax?, костлявый click, чтобы посылать данные и пока они посылают себе не оставлять, что он вновь дает снова click, я поместил loading, но этого не достаточно. Большое спасибо

.controller('productoGctrl', ['$scope', '$timeout', '$http','$ionicPopup', '$ionicLoading', 'productosDato','urlRoot', controlfproductoG])

function ontrolfproductoG ($scope, $timeout, $http, $ionicPopup, $ionicLoading, productosDato, urlRoot){
  $scope.agregarCanastika = function (id, tipo, nombre, preguntas, restantes) {
    $scope.divSepa = 'active';
    $scope.divAnimar = 'carritoAnimar';
    $scope.diviconoCar = 'active';

    $timeout(function () {
      $scope.divSepa = '';
      $scope.divAnimar = '';
      $scope.diviconoCar = '';
      var cantidadPreguntas = preguntas.length;
      var respondioP = respondioPreguntasProducto(id, tipo, cantidadPreguntas);
      console.log(id + '-' + tipo + '-' + restantes);
      if (id == undefined || id == '') {
       popupN('ooooppppsss', 'Id de proucto no disponible', 'advertencia', $ionicPopup);
      }
      else if (tipo == undefined || tipo == '') {
       popupN('ooooppppsss', 'Tipo de producto no disponible', 'advertencia', $ionicPopup);
      }
      else if (parseInt(restantes) <= 0) {
        popupN('Alerta', 'EL producto se ha agotado', 'advertencia', $ionicPopup);
      }
      else if (respondioP) {
        console.log(respondioP);
        var datoService = {
         actionType: 'get',
         iduser: localStorage.getItem('iduser'),
         idproducto: id
        };
        perguntasBuscarProducto($scope, $http, $ionicPopup, $ionicLoading, urlRoot.urlAjax + respondioP.tipoService,datoService)
         .then(function (date) {
           console.log(date);
           if (!date) {
             ajaxhttp(
               $http,
               $ionicLoading,
               $ionicPopup,
               'POST',
               urlRoot.urlAjax + 'CanastikaService.php',
               {
                actionType: 'agregar',
                iduser: localStorage.getItem('iduser'),
                tipo: tipo,
                idproducto: id
               },
               resAgregarCan($ionicLoading, $ionicPopup, urlRoot, nombre, 3)
            );
           }
           else{
            productosDato.nuevoProducto(id, tipo);
            direcionarGn('#/app/yagans');
           }
         });
      }
      else{
       console.log('noRespondio')
       $scope.show($ionicLoading);
       ajaxhttp(
         $http,
         $ionicLoading,
         $ionicPopup,
         'POST',
         urlRoot.urlAjax + 'CanastikaService.php',
         {
          actionType: 'agregar',
          iduser: localStorage.getItem('iduser'),
          tipo: tipo,
          idproducto: id
         },
         resAgregarCan($ionicLoading,$ionicPopup,urlRoot, nombre, 1)
       );
      }
    }, 500)
  }
}


function ajaxhttp($http,$ionicLoading,$ionicPopup,method,url,data,funrespuesta) {
  $http({
   method: method,
   url: url,
   headers: {'Content-Type': 'application/x-www-form-urlencoded'},
   data:data,
   timeout : 180000
  }).then(function (res) {
    funrespuesta(res.data)
  }, function (res) {
    $ionicLoading.hide();
    console.log(res);
    if (res.status == -1) {
      //popupC('ooooppppsss: '+ res.status, 'Se pasó el tiempo de plazo buscando la información','location', $ionicPopup);
      console.log('ooooppppsss: '+ res.status + 'Se pasó el tiempo de plazo buscando la información');
    }
    else{
     popupN('ooooppppsss: '+ res.status, res.statusText, 'advertencia', $ionicPopup);
    }
  });
}

function perguntasBuscarProducto ($scope, $http, $ionicPopup, $ionicLoading, url, dato) {
 var promise = new Promise();
 var preguntas;

 $scope.show = function() {
   $ionicLoading.show({
    template: '<p>Loading...</p><ion-diseno></ion-diseno>'
   });
 };

 $scope.hide = function(){
   $ionicLoading.hide();
 };

 $scope.show($ionicLoading);

 ajaxhttp(
  $http,
  $ionicLoading,
  $ionicPopup,
  'POST',
  url,
  dato,
  function (res) {
    console.log(res);
    $ionicLoading.hide();
    if (res.code == '0') {
      if (res.preguntas.length > 0) {
        promise.done(res.preguntas)
      }
      else{
        promise.done(false);
      }
    }
    else{
     console.log(res)
    }
  }
 );
 return promise;
}
1
задан 28.08.2019, 17:15
1 ответ

Я вижу, что ты используешь ionic, следовательно это может подавать тебя:

Я Вижу, что ты определяешь функции и перемещаешь из-за параметра все вставки зависимости, у которой есть твой драйвер. Это мне не кажется очень хорошим, ЕСЛИ он состоит в том, что ты занимаешь эти функции с других драйверов, хотя я вижу, что ты определяешь их внутри твоего драйвера именно поэтому, я советую тебе, чтобы ты объявил их, как у тебя есть они, или с какими-то $scope.

Внутри твоего драйвера ты определяешь:

$scope.show = function() {
    $ionicLoading.show({
        template: '<ion-spinner icon="android"/>'
    });
};
$scope.hide = function() {
    $ionicLoading.hide();
};

, И когда ты сделаешь названный к твоей функции ajax, ты можешь делать это:

$scope.ajaxhttp = function(method,url,data,funrespuesta) {
    $scope.show();
    $http({
        method: method,
        url: url,
        headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
        data: data,
        timeout: 180000

    }).then(function(response) {
        $scope.hide();
    }, function error(response) {
        /* Error llamada */
        $scope.hide();
    });
}
2
ответ дан 03.12.2019, 18:27
  • 1
    Если он из-за этой funció n ajaxhttp и perguntasBuscarProducto я использую их в нескольких различных conotroladores. – Albert Arias 19.12.2016, 22:06
  • 2
    если того же способа, поскольку я это сделал, ajaxhttp они меняют функцию параметров и perguntasBuscarProducto - те же параметры, я послал их так, потому что ionicPopup изменяет бдительность и ionicloading - это, чтобы показывать, и если он заканчивает colca hide. – Albert Arias 19.12.2016, 22:11
  • 3
    ahhh, если это делало, но до настоящего времени noté что мне не хватает в if else colcarle ionicLoading, большое спасибо, твой ответ подает меня tambié n :) – Albert Arias 19.12.2016, 22:15

Теги

Похожие вопросы