Слишком много отказов JS - PullRequest
1 голос
/ 23 марта 2020

У меня есть код JS / jQuery, работающий как брелок, пока я не хочу запустить другую функцию (у меня даже есть дубликаты некоторых функций, но, к счастью, такая же ошибка все еще не появляется, даже если исходная функция была запущена раньше)

Я проверил синтаксис и строку за строкой, но не повезло, пожалуйста, мне нужна другая пара глаз, чтобы увидеть то, что я не вижу.

Контекст: когда я нажимаю кнопку, он Откройте модальный ajax, я добавил несколько html подсвечиваний, если требуется полный код, пожалуйста, совет.

Ps. не носитель английского языка sh, извините за любую ошибку или понял с ней.

Код html (только важные строки, это оригинальный html тот, кто вызывает модал):

<form method="post" id="serviceOrdersAddForm" data-user-token="<?php echo $_SESSION['userToken']; ?>" action="main/serviceOrders/addController.php">

<a class="btn btn-info form-control addClientHandler" data-client-modal="true" id="serviceOrderServiceTypeIdBtn" href="ajax/addClientModal.php">Nuevo Cliente</a>

</form>

Код JS:

// ADD CLIENT MODAL
(function($) {
 'use strict';
 var ClientModal = {
  initialize: function() {
   this.$body = $( 'body' );
   this.events();
  },

  events: function() {
   var _self = this;
   var elem;
   this.$body.find( '[data-client-modal="true"]' ).on( 'click', function( e ) {
    e.preventDefault();
    elem = 'addClientHandler';
    _self.show(elem);
    console.log('hola');
   });
   return this;
  },

  clickBtn: function (){
   $('.showFormErrors ul li').remove();

   $('#clientsAddFormContainer > .showFormErrors').addClass('d-none');
   var userToken = $('#serviceOrdersAddForm').attr('data-user-token');
   var userRut = $('#serviceOrderCreationUserRut').attr('value');
   var _self = this;
   var parametros = {
    "userToken" : userToken, 
    "userRut" : userRut, 
    "clientRut" :  clientRut,
    "clientType" :  clientType, 
    "clientName" :  clientName, 
    "clientMiddleName" :  clientMiddleName,
    "clientLastName" :  clientLastName, 
    "clientSureName" :  clientSureName, 
    "clientAddress" :  clientAddress,
    "clientCommuneId" :  clientCommuneId, 
    "clientEmail" :  clientEmail, 
    "clientphone" :  clientphone
   };

   var url = 'main/clients/addController.php';
   ajaxSetter(parametros, url, 'post').then( function(data){
    //here success
    // _self.hide();
   }).catch(err => alert(err));
  },

  clientCheck: function ( clientType ){
   var checkType = (clientType == 1) ? 'clientRut' : 'clientRut1';
   var fieldName = $('#' + checkType).val();
   var userToken = $('#serviceOrdersAddForm').attr('data-user-token');
   var userRut = $('#serviceOrderCreationUserRut').attr('value');

   var parametros = { "userToken" : userToken, "userRut" : userRut, "clientType" : clientType, "clientRut" : fieldName, "tableName" : 'clients' };
   var url = 'main/clients/checkClient.php';
   ajaxSetter(parametros, url, 'post').then( function(data){
    if(data == "0"){
     $("#clientRutStatusLbl").removeClass( "text-danger text-dark" ).addClass( "text-success" );
     $("#clientRutStatusLbl").text("Cliente Nuevo");
     $("#clientRutStatusLblInnerDiv").show();
     $("#clientSubmitBtn").prop("disabled", false);
    }else{
     $("#clientRutStatusLbl").removeClass( "text-success text-dark" ).addClass( "text-danger" );
     $("#clientRutStatusLbl").text("Cliente Registrado");
     $("#clientRutStatusLblInnerDiv").show();
     $("clientSubmitBtn").prop("disabled", true);
    }
   }).catch(function (err){
    console.log(err);
   });
  },
  show: function( elem ) {
    var _self = this;
    $('.'+elem).magnificPopup({
     type: 'ajax',
     callbacks: {
      close: function() {
       // console.log('Popup closed');
      },
      ajaxContentAdded: function() {
       $('#clientRut').mask("99.999.999-*").focus(); //agrego mascara y focus al rut
       $('#clientphone').mask("999-99999999");
       $('#clientCommuneId').attr("data-source", "ajax/getCommunes.php") //instancio el select de comunas
                            .attr("data-valueKey", "id")
                            .attr("data-displayKey", "comuna")
                            .attr("data-plugin-selectTwo");
       $('#clientCommuneId').attr("data-plugin-selectTwo"); //instancio el select de tipo usuario
       setSelect2("clientCommuneId"); // inicializo el select de comunas
       setSelect2("clientType"); // inicializo el select de comunas
       loadSelectOptGrp("clientCommuneId");

       $('#clientCommuneId').on('change', function() { //quito seleccione cuando muevo el select
        deleteSelectDefault("clientCommuneId");
       });

      $('#clientType').on('change', function() { //listener cuando cambia tipo de cliente
       _self.clientTypeChanged(this.value);
      });

      $('#clientRut').on('change', function( ) { // listener cuando dejo el campo clientRut                   
       _self.clientCheck(1);
      });

      $('#submitBtnAddClientModal').click(function() { // listener cuando presiono enviar
       _self.clickBtn();
      });
     }
    }
   });
  },

  hide: function() {
   $.magnificPopup.close();
  },
 };

 this.ClientModal = ClientModal;
 $(function() {
  ClientModal.initialize();
 });

}).apply(this, [jQuery]);

есть некоторые глобальные вызовы функций, но я включаю только важный

/**
 ** Ejecuta una consulta ajax
 ** @param parametros incluye toda la data a enviar
 ** @param url el archivo donde se ejecuta el php
 ** @param type tipo, usualmente POST
**/
function ajaxSetter(parametros, url,type) {
  return new Promise(function(resolve, reject) {
    $.ajax({
      url: url,
      data: parametros,
      type: type,
      success: function(data) {
        console.log('Ajax Success: ');
        console.log(data);
        resolve(data) // Resolve promise and go to then()
      },
      error: function(err) {
        console.log('Ajax Success: ');
        console.log(data);
        reject(err) // Reject the promise and go to catch()
      }
    });
  });
}

, есть много spangli sh в моем коде, я знаю: (

Итак, две проблемы, во-первых, каждый раз, когда я нажимаю на якорь addClientHandler, я получаю вывод на консоль (функция "events", 7 строк console.log (' hola ');), мне нужно дважды щелкнуть, чтобы открыть де-модал, но я получил два "hola" на консоли, я знаю, что чего-то не хватает, чтобы открыть модал при первом щелчке.

Вторая проблема это когда я нажимаю submitBtnAddClientModal, он должен запустить функцию clickBtn, вместо этого в Chrome я получил

RangeError: Превышен максимальный размер стека вызовов "

и в Firefox

«InternalError:« слишком много рекурсии »

Это даже не делает Вызов XHR :( не уверен, что происходит.

Я даже заменил код на clickBtn на код на clientCheck (который работает плавно и нормально, независимо от того, когда и где я его вызываю, внутри свои пределы наверняка)

любой совет будет очень признателен,

заранее спасибо всем, кто пытается помочь!

1 Ответ

0 голосов
/ 24 марта 2020

Итак, после нескольких часов тестирования и отладки console.log я нашел ответ ...

Переменные не установлены (facepalm), не знаю, почему он не выбрасывает неопределенное, а не ломает весь звонок.

это будет домашнее задание после того, как я закончу sh этот проект.

Спасибо за чтение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...