Jump to content
Jonas Ribeiro Nascimento

Mvc Php + Ajax não consigo passar return json_encode para o response do ajax

Recommended Posts

Ola a todos e agradeço desde já

Tenha a classe de validação do form onde pega todos os erros do form:

// Validação final do cadastro
    public function validateFinalCadastro($arrVar) {

            if(count($this->getErro())>0){
                    $arrResponse=[
                        "retorno"=>"erro",
                        "erros"=>$this->getErro()
                    ];


                }else{
                    $arrResponse=[
                        "retorno"=>"success",
                        "erros"=>null
                    ];

            }

            return json_encode($arrResponse, JSON_UNESCAPED_UNICODE);

    }

Aqui tenho o Controller que passa para view:

public function teste() {
            //echo 'esse é um teste';
            $this->recVariaveis();

            $validate = new ClassValidate();
            $validate->validateFields($_POST);
            $validate->validateEmail($this->Email);
            $validate->validateIssetEmail($this->Email);
            $validate->validateData($this->DataNascimento);
            $validate->validateCpf($this->Cpf);
            $validate->validateConfSenha($this->Senha,$this->SenhaConf);
            $validate->validateStrongSenha($this->Senha);                
            $validate->validateCaptcha($this->gRecaptchaResponse);
            $validate->validateFinalCadastro($this->arrVar);
    }

Se eu dar um echo, print ou vardump na $validate->validateFinalCadastro($this->arrVar); consigo passar ela pra view e apresentar o erro ...ele apresenta depois do fechamento do html da pagina...

{"retorno":"erro","erros":["Email já cadastrado!","Utilize uma senha mais forte!","Sistema de segurança foi ativado! Atualize a página e tente novamente ou aguarde mais um pouco."]}

Aqui esta o ajax sem datatype: 'json'

Sem datatype: 'json' eu entro no success reponse mais caio no else, porque o response.retorno esta sem o datatype: 'json'.

$('#FormCadastroClientes').on('submit', function(event){ event.preventDefault(); 
var dados=$(this).serialize(); console.log(dados);

$.ajax({
    url: getRoot()+'CadastroClientes/teste',
    type: 'post',
    contentType: "application/x-www-form-urlencoded;charset=UTF-8",
    data: dados,
    success: function (response) {
        $('.retornoCad').empty();
        if(response.retorno == 'erro'){
            getCaptcha();
            $.each(response.erros,function(key,value){
                $('.retornoCad').append(value+'');
            });
        }else{
            $('.retornoCad').append('Dados inseridos com sucesso!');
        }
    },

    error: function (response, jqXHR, request, status, errorThrown, erro) {

            console.log(response);
            //alert(dados);                                     
            console.log(dados);                                     
            //alert(jqXHR);                                     
            console.log(jqXHR);                                     
            //alert(request);                                     
            console.log(request);                                     
            //alert(status);  
            console.log(status);  
            //alert(errorThrown); 
            console.log(errorThrown); 
            //alert(erro);                                      
            console.log(erro);                                      

         },

    complete: function (jqXHR, textStatus) {
            //colocar aqui algo que deseja que faça ao terminar todo o processo (finnaly)

    }

});

Ajax com datatype: 'json' nao consigo entrar no success ele já cai no erro

$('#FormCadastroClientes').on('submit', function(event){
event.preventDefault();
var dados=$(this).serialize();
console.log(dados);

$.ajax({
    url: getRoot()+'CadastroClientes/teste',
    type: 'post',
    dataType: 'json',
    data: dados,
    success: function (response) {
        $('.retornoCad').empty();
        if(response.retorno == 'erro'){
            getCaptcha();
            $.each(response.erros,function(key,value){
                $('.retornoCad').append(value+'');
            });
        }else{
            $('.retornoCad').append('Dados inseridos com sucesso!');
        }
    },

    error: function (response, jqXHR, request, status, errorThrown, erro) {

            console.log(response);
            //alert(dados);                                     
            console.log(dados);                                     
            //alert(jqXHR);                                     
            console.log(jqXHR);                                     
            //alert(request);                                     
            console.log(request);                                     
            //alert(status);  
            console.log(status);  
            //alert(errorThrown); 
            console.log(errorThrown); 
            //alert(erro);                                      
            console.log(erro);                                      

         },

    complete: function (jqXHR, textStatus) {
            //colocar aqui algo que deseja que faça ao terminar todo o processo (finnaly)

    }

});

Observações: - Consigo inserir no banco tudo ok. - Consigo apresentar o rertun json_encode direto na view - Consigo entrar no success do ajax sem usar datatype: 'json' não entro no if para ler o array mais entro no else.

Eu recebo esse erros no console.log

No response eu teria que receber o return do json_encode e não recebo. O que eu recebo é o html da view.

O ajax esta esperando um retorno em json e nao o html da pagina.

parsererror SyntaxError: "JSON.parse: unexpected character at line 1 column 1 of the JSON data"

Obrigado a todos.....atecipadamente

 

 

Share this post


Link to post
Share on other sites

Se você está retornando um Json, o contentType tem que ser do tipo application/json.

Exemplo:

dataType: 'json',
contentType:'application/json',
crossDomain: true,
cache: false

 

Share this post


Link to post
Share on other sites
16 horas atrás, Williams Duarte disse:

Se você está retornando um Json, o contentType tem que ser do tipo application/json.

Exemplo:


dataType: 'json',
contentType:'application/json',
crossDomain: true,
cache: false

 

Oi Williams descobri o erro eu estava retornando o html da pagina inteira e o ajax esperando o json... Entao criei na minha rotas uma view sem nada somente com returno do json ai deu certo

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By violin101
      Caros amigos, saudações...
       
      Estou usando Codeigniter e estou com uma pequena dúvida.
       
      Tenho um Form com os seguintes campos:
      Data Início..... <input type="date" /> Hora Início.... <input type="time" /> Data Final..... <input type="date" /> Hora Final.... <input type="time" /> até aqui tudo bem
       
      Gostaria de fazer uma VERIFICAÇÃO para impedir que o usuário GRAVE no MySql uma data menor que a data atual.
      ou seja:
      Data Início nunca poderá ser menor que a Data Atual.
      e a
      Data Final só poder ser igual ou maior que a Data Início.
       
      Grato,
       
      Cesar
       
    • By Salvatore
      Galerinha Boa, alguém pode me explicar como eu faço pra editar isso abaixo usando php
       
       
       <div class="nome-vip">
              <p class="text-center"><span>1</span> CASH</p>             <---------------essa parte eu queria saber como eu edito clicando por cima(tentei usando contenteditable), mas n deu do jeito que eu queria,preciso que o valor editado fique em uma variavel PHP
            </div>
            <p class="text-center" style="color: #888; font-size: 15px;">por apenas</p>
            <div class="preco-vip">
              <p class="text-center">R$ 1</p> <------------------- e aqui iria ter a variável preço que ja estaria definida como um, e quando la em cima fosse adicionado um valor int, somasse os 2 e gerasse a variavel valor e exibindo ela
            </div>
       
      Alguém ajuda eu, to caçando em mts sites algo assim mas n consigo
       
    • By drx
      Olá pessoal!
      Estou com um probleminha aqui. Estou me embrenhando pelos ajax e jquery. Muito interessante. 
      Eu peguei um exemplo e é bem simples. Só que não retorna a mensagem para a div.
       
      Eu tenho uma div em pagina1.php onde o usuário entra com um número identificador em um campo textfield.
      Após entrar com o número identificador, solicito a verificação em uma outra página.php onde tenho uma consulta no mysql.
      O echo da consulta é: Existente ou Inexistente. A consulta é feita pelo número identificador. Fiz a verificação e retorna perfeitamente,
      Porém eu quero que ao verificar, a mensagem retorne para minha outra div logo abaixo na pagina1.php
      Vou passar o código para facilitar....
       
      <html>
      <head>
       
      <script src="js/jquery.js"></script>
      <script>
      $(function(){
        $('#form').submit(function(){
           $.ajax({
             url: 'x_consultar_patro.php',
             type: 'POST',
             data: $('#form').serialize(),
             success:function ( data ) {
                 if (data != '') {
                     $('#frm_cadastro').html( data );
                 }
               }
             });
           return false;
         });
      });
      </script>
       
      </head>
       
      <body>

      <div id="frm_cadastro"></div>

      <form id="form" method="post" action="">
        <input type="text" name="codpatro" id="codpatro"/>
        <input type="submit" name="btn_procurar" id="btn_procurar" value="Procurar"/>
      </form>
       
      </body>
      <html>
       
       

    • By Claudia França
      prezados como eu altero de loked para unloked do arro para não carregar o java e seguir com o procedimento. 
       
       
      ?Veja nesse link https://drive.google.com/drive/u/0/folders/1h0EbUoz3UOL8j9orWirUAPILt7cg7q-p 
      minhas imagens não estao subindindo aqui, não sei porque, acho que tenho limitação. 
       
       
    • By Claudia França
      prezados qdo removo o require colocado antes do doctype o botão desaparece como na imagem . Alguem pode me explicar porque??    dentro do setting tem apenas informações key do cliente e configurações da conta de email. 
       


×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.