BB
Utilização de requisições AJAX
Olá,
tenho o seguinte cenário: Cadastro de motorista, cliente, proprietário e etc.. Todas essas classes estendem da classe pessoa. Dessa forma criei uma trait para ser utilizada na view desses cadastros, dessa forma quando adicionar um novo campo ou remover um campo em comum faço isso somente em um arquivo segue parte do código:
tenho o seguinte cenário: Cadastro de motorista, cliente, proprietário e etc.. Todas essas classes estendem da classe pessoa. Dessa forma criei uma trait para ser utilizada na view desses cadastros, dessa forma quando adicionar um novo campo ou remover um campo em comum faço isso somente em um arquivo segue parte do código:
<?phptrait PessoaCadastroTrait{ public function insereCamposPessoa($contribui_icms = FALSE, $form) { TPage::include_js('app/view/traits/requisicoes.js'); $idpes = new TEntry('pes_codigo'); $pes_tipo = new TRadioGroup('pes_tipo'); $nome = new TEntry('pes_nomerazaosocial'); $cpf_cnpj = new TEntry('pes_cpfcnpj'); $cidade = new TDBUniqueSearch('cdd_codigo', 'conecta', 'Cidade', 'cdd_codigo', 'cdd_nome', 'cdd_nome'); $cdd_novo = new TButton('bt_novoCidade'); $telefone = new TEntry('pes_telefone'); $endereco = new TEntry('pes_endereco'); $numero = new TEntry('pes_nroender'); $complemento = new TEntry('pes_complementoender'); $bairro = new TEntry('pes_bairro'); $cep = new TEntry('pes_cep'); $rg_ie = new TEntry('pes_rgie'); $emi_rg = new TDate('pes_dtemirg'); $email = new TEntry('pes_email'); $nome_fantasia = new TEntry('pes_nomefantasia'); $nasc = new TDate('pes_datanascimento'); $cpf_cnpj->setProperty("onBlur", "buscarCPFAjax()"); . . . . parent::addFields( [$labelDB] ); parent::addFields([new TLabel('ID')], [$idpes]); parent::addFields([new TLabel('Tipo')], [$pes_tipo]); if($contribui_icms) { parent::addFields([new TLabel('Contribuinte ICMS')], [$contrIcms]); } parent::addFields([new TLabel('CPF/CNPJ')], [$cpf_cnpj]); parent::addFields([new TLabel('Nome/Razão Social')], [$nome], [$labelFantasia], [$nome_fantasia]); parent::addFields([new TLabel('CEP')], [$cep]); parent::addFields([new TLabel('Endereço')], [$endereco, new TLabel('Nro'), $numero, new TLabel('Complemento'), $complemento]); parent::addFields([new TLabel('Bairro')], [$bairro], [new TLabel('Cidade')], [$cidade, $cdd_novo]); parent::addFields([new TLabel('Telefone')], [$telefone], [$labelNasc], [$nasc]); parent::addFields([new TLabel('RG/IE')], [$rg_ie], [$labelEmiRg], [$emi_rg]); parent::addFields([new TLabel('E-mail')], [$email]); }?>
Essa trait eu utilizo dessa forma no cadastro de motorista:
<?phpclass MotoristaCadastroView extends BootstrapFormBuilder{ use PessoaCadastroTrait; public function __construct() { parent::__construct(); $this->insereCamposPessoa(FALSE, 'form_mtr'); //método da trait que insere os campos comuns das pessoas . . . }?>
Está tudo funcionando perfeitamente. Porém existe a necessidade de quando sair do input de CPF/CNPJ da pessoa buscar na base de dados se já existe este CPF/CNPJ.
Tentei utilizar : $cpf->setExitAction(new TAction($this, 'procura_cpf_cnpj')); Mas dá o seguinte erro: permissão negada.
Então pensei em utilizar ajax. Dessa forma, criei um arquivo js que inclui na trait , onde esse arquivo tem o método buscarCPFAjax() que é chamado no evento onBlur do input de CPF/CNPJ.
Porém está me retornando o seguinte erro no console do depurador do browser.:
500 (Internal Server Error)
Segue os arquivos para o ajax:
requisicoes.js
<?phpfunction buscarCPFAjax(){ var cpf = $("input[name=pes_cpfcnpj]").val(); $.ajax({ url: 'app/view/traits/ajax.php', type: 'post', dataType: "json", data: {'acao': 'buscaCPF', 'cpf': cpf}, success: function (data) { alert(data); }, error: function (xhr, desc, err) { console.log(xhr); console.log("Details: " + desc + "\nError:" + err); } });}?>
ajax.php
<?phpinclude_once("app/lib/util/Functions.php");$acao = $_POST['acao'];switch ($acao) { case "buscaCPF": $cpf = preg_replace("/[^0-9]/", "", $_POST['cpf']); $pessoas = Functions::formataCPFCNPJ($cpf, 'J'); echo json_encode($cpf); break;}?>
Mais um detalhe talvez importante: O problema está em utilizar a classe Functions, pois quando o arquivo ajax.php retorna um array qualquer, o javascript recebe com sucesso...
Já tentei fazer a pesquisa no Banco de Dados no arquivo ajax.php, mas tmb dá erro..
Tentei utilizar uma classe estendendo de BootstrapFormBuilder para pessoa, e então o formulário de motorista estendendo do formulário de pessoa. Porém também da o erro de permissão negada no ExitAction. Acredito que teria que ser no control esta função para buscar o CPF... Mas do jeito que está eu teria que adicionar essa função em todos os control dos cadastro, mas está não é a ideia :/
A TAction deve receber um array: