json php error, but json is correct

0

My php script returns a json, but when js is going to read json it says error.

Butcopyingandpastingthesamejsonintoavalidator(ex: link ) says it's correct.

For those who can help me, I appreciate it.

Edit: follows json

{"ArrayTopFiveItens":[{"Cod_Item":"1","Nome_Comercial":"Coca-Cola Lata","Foto":""},{"Cod_Item":"2","Nome_Comercial":"Coca-Cola KS","Foto":""},{"Cod_Item":"3","Nome_Comercial":"Agua com gas","Foto":""},{"Cod_Item":"4","Nome_Comercial":"Cerveja 600 ML","Foto":""},{"Cod_Item":"5","Nome_Comercial":"Cerveja litro","Foto":""}],"ArrayComandas":[{"Cod_Comanda":"1","Descricao":"Comanda","Nome_Interno":"1","Utilizadores":[{"Ref_Comanda":"1","Fechamento_Forcado":0,"ObjPessoa":{"Cod_pessoa":"1","Nome":"Rafael","CPF":"06282724996","Reponsavel_Financeiro":"0","Email":"","Telefone":""}},{"Ref_Comanda":"1","Fechamento_Forcado":0,"ObjPessoa":{"Cod_pessoa":"2","Nome":"Rafael","CPF":"06282724996","Reponsavel_Financeiro":"0","Email":"","Telefone":""}}],"Itens":[],"Requer_Utilizador":"1","Cor":"info","Atualiza_Painel":"0","TotalComanda":0},{"Cod_Comanda":"2","Descricao":"Comanda","Nome_Interno":"2","Utilizadores":[{"Ref_Comanda":"2","Fechamento_Forcado":0,"ObjPessoa":{"Cod_pessoa":"2","Nome":"Rafael","CPF":"06282724996","Reponsavel_Financeiro":"0","Email":"","Telefone":""}}],"Itens":[],"Requer_Utilizador":"1","Cor":"success","Atualiza_Painel":"0","TotalComanda":0},{"Cod_Comanda":"3","Descricao":"Comanda","Nome_Interno":"3","Utilizadores":[{"Ref_Comanda":"3","Fechamento_Forcado":0,"ObjPessoa":{"Cod_pessoa":"3","Nome":"Joao","CPF":"","Reponsavel_Financeiro":"0","Email":"","Telefone":""}}],"Itens":[],"Requer_Utilizador":"1","Cor":"dark","Atualiza_Painel":"0","TotalComanda":0},{"Cod_Comanda":"4","Descricao":"teste","Nome_Interno":"4","Utilizadores":[{"Ref_Comanda":"4","Fechamento_Forcado":0,"ObjPessoa":{"Cod_pessoa":"4","Nome":"Teste a","CPF":"69454976826","Reponsavel_Financeiro":"0","Email":"","Telefone":"47999285532"}}],"Itens":[],"Requer_Utilizador":"1","Cor":"info","Atualiza_Painel":"0","TotalComanda":0},{"Cod_Comanda":"5","Descricao":"wsdf","Nome_Interno":"5","Utilizadores":[{"Ref_Comanda":"5","Fechamento_Forcado":0,"ObjPessoa":{"Cod_pessoa":"4","Nome":"Teste a","CPF":"69454976826","Reponsavel_Financeiro":"0","Email":"","Telefone":"47999285532"}}],"Itens":[],"Requer_Utilizador":"1","Cor":"dark","Atualiza_Painel":"0","TotalComanda":0},{"Cod_Comanda":"6","Descricao":"teste","Nome_Interno":"6","Utilizadores":[{"Ref_Comanda":"6","Fechamento_Forcado":0,"ObjPessoa":{"Cod_pessoa":"4","Nome":"Teste a","CPF":"69454976826","Reponsavel_Financeiro":"0","Email":"","Telefone":"47999285532"}}],"Itens":[],"Requer_Utilizador":"1","Cor":"info","Atualiza_Painel":"0","TotalComanda":0}],"permissaoCLIENT":true,"NomeArquivoImpressao":"","NomeImpressora":"","TemImpressao":false,"ComandaFechada":{"Cod_Comanda":null,"Descricao":"","Nome_Interno":null,"Utilizadores":[],"Itens":[],"Requer_Utilizador":1,"Cor":"primary","Atualiza_Painel":true,"TotalComanda":0},"Cod_Item_Venda_Direta":0,"Nome_Interno_Venda_Direta":" ","Preco_Venda_Venda_Direta":0,"Quantidade_Venda_Direta":0,"Abre_Venda_Direta":0,"DigitoVerificadorAutomatico":"","Alerta":true,"StatusOperacao":true,"MSGOperacao":"","InexistenteException":false}

JS Code Part One:

  $.post('./assets/classes/Controller.Controller.php', {acao: 'new' ,  Controller: controller , data:data}, function(x){
       VerificaNotificacao("ao Limpar Formulario",x,true);
       popular(x);
       ModalClose();
       FocusCampo('.primeiro');

  });

Function VerificationNotification

function VerificaNotificacao(acao,json,somenteError){
        var obj = JSON.parse(json);
        DigitoVerificadorAutomatico = obj.DigitoVerificadorAutomatico;
        if(DigitoVerificadorAutomatico == 0){
            $('.dig').attr('readonly','readonly');
        }else{
            $('.dig').removeAttr('readonly');
        }
        if(obj.Alerta === true){
            if(obj.StatusOperacao === true){
                if(!somenteError){
                    Notificacao("Sucesso ","Sucesso "+acao,"success");
                }
                return true;
            }else{
                Notificacao("Ocorreu um erro","Erro "+acao+"\nErro: "+obj.MSGOperacao,'error');
                return false;
            }
        }
  }

The error occurs in this line var obj = JSON.parse(json);

Thanks to all who helped

    
asked by anonymous 31.05.2017 / 21:36

3 answers

0

The point is that jQuery specifically already parses Json automatically as described in:

  • link

      

    The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).

The default is "intelligent guessing", ie jQuery tries to guess the content of the response, especially if Content-type is set to something like application/json (which should help with "guessing"), I think is using jQuery because of this:

$.post(...

Then it is not necessary:

var obj = JSON.parse(json);

Just do something like:

var obj = json;

Of course you can force the behavior as text and parse afterwards:

$.post('./assets/classes/Controller.Controller.php', {acao: 'new' ,  Controller: controller , data:data}, function(x){
   VerificaNotificacao("ao Limpar Formulario",x,true);
   popular(x);
   ModalClose();
   FocusCampo('.primeiro');
}, "text"); //Definido como texto

Or force json and remove JSON.parse , like this:

$.post('./assets/classes/Controller.Controller.php', {acao: 'new' ,  Controller: controller , data:data}, function(x){
   VerificaNotificacao("ao Limpar Formulario",x,true);
   popular(x);
   ModalClose();
   FocusCampo('.primeiro');
}, "json"); //Força o proprio jQuery fazer o parse

function VerificaNotificacao(acao,json,somenteError){
    var obj = json;//Sem json parse

    DigitoVerificadorAutomatico = obj.DigitoVerificadorAutomatico;
    if(DigitoVerificadorAutomatico == 0){
        $('.dig').attr('readonly','readonly');
    }else{
        $('.dig').removeAttr('readonly');
    }
    if(obj.Alerta === true){
        if(obj.StatusOperacao === true){
            if(!somenteError){
                Notificacao("Sucesso ","Sucesso "+acao,"success");
            }
            return true;
        }else{
            Notificacao("Ocorreu um erro","Erro "+acao+"\nErro: "+obj.MSGOperacao,'error');
            return false;
        }
    }
}
    
31.05.2017 / 22:52
1

The error is related to JSON.parse in your javascript code.

This may happen when trying to parse an invalid JSON, but as in your example JSON is valid, make sure you are not trying to parse an already parsed JSON:

var res = JSON.parse('{"key":"value"}'); // Sucesso, faz o parse JSON de uma string
var res = JSON.parse({"key":"value"}) // Erro, pois o JSON já é um objeto javascript 

In this case, jQuery already returns the response as a parseled JSON, so you do not need JSON.parse(json);

    
31.05.2017 / 21:59
0

I found characters like \ r \ n in your json. Try removing them in php before moving to variable. Suggestion:

$json = preg_replace("/\r\n|\r|\n/", ' ', $json);

I simulated your code by testing only this problem part, changing where \ r \ n there is / r / n and I have no more error. link

    
31.05.2017 / 22:02