O retorno da função está sempre em "alert (cpfok)" independentemente de ser 0 ou 1

Blockquote

$(’#cpfcomprador’).blur(function() {

$.ajax({
    url: 'validar',
    type: 'POST',
    cache: false,
    data: 'cpf='+$("#cpfcomprador").val(),        
    success: function(cpfok){           
             if (cpfok == 1){
                $('#myModal').modal('show');
             } else {
                 alert(cpfok)
             }               

              }                         
});

});

Blockquote

Mesmo quando ‘cpfok = 1’ sempre cai na condição “else” e mostra o alerta e não o modal.
Aqui esta o retornos quando ‘cpfok = 1’ , neste caso teria que ir para o modal:
cpf%20bco

Já tentou

cpfok == "1"

Afinal, o valor retornado é, sempre, uma String.

@darlan_machado Já tentei dessa maneira

cpfok == “1”

Cara, então tem alguma coisa além deste valor.

Esse é o código do retorno, o controller do codeigniter:

public function validar(){
$cpf = $this->input->post(‘cpf’);
$cpf = str_replace(".", null, $cpf);
$cpf = str_replace("-", null, $cpf);
$cpf = str_replace(" ", null, $cpf);

	$cpfUsado = $this->CompradorM->validaCPFDuplicadoexec($cpf);


	if ($cpfUsado > 0 ) {
		$cpfok = 1;
	} else {
		$cpfok = 0 ;
		}
	
		echo json_encode($cpfok);

}

o valor se limita a 0 ou 1, ja tentei com “true” e “false” e continua a mesma resposta.

Mas, só para eu entender, por que não retorna true ou false? Me parece mais lógico, salvo se você precisa realizar alguma operação que necessite de um valor inteiro.
Porém, eu também não entendi a razão para não funcionar.

@darlan_machado já fiz retornando true ou false, e o problema continua o mesmo.

Quando se retorna um json_encode, você precisa ao menos devolver uma chave para o js pegar…

echo json_encode(['cpfok'=>($cpfUsado > 0)]); //php >= 5.4
echo json_encode(array('cpfok'=>($cpfUsado > 0))); //php < 5.4

No js primeiro é bom dizer ao jquery que o retorno será json…

$.ajax...
    ...
    dataType: 'json',
    ...

Isso fará o parse do retorno…

 success: function(json){
     console.log(json.cpfok); // a chave la no json_encode lembra?
 }...

Para ver o resultado de console.log use o F12 do navegador na aba console, melhor que ficar usando alert em tudo que é canto :wink: e fica mais profissional o desenvolvimento, já usando testes, etc…

E @darlan_machado o fato de usar apenas o operador de igualdade ==, nesse caso não fará diferença se o valor será int ou str o js tratará da mesma forma, assim como no php, por isso existe um operador de identidade === que testará não só o valor como o tipo da variável…

Sucesso!

@rodevops ao colocar:

$.ajax…

dataType: ‘json’,

O codigo não executa nada, não aparece o:

success: function(json){
console.log(json.cpfok); // a chave la no json_encode lembra?
}…

Como ficou o trecho do $.ajax?

Ficou dessa maneira:

$('#cpfcomprador').blur(function() {  
    $.ajax({	    	
    	dataType: 'json',
    	url: 'validar',
        type: 'POST',	            	
        data: 'cpf='+$("#cpfcomprador").val(),	       
        success: function(json){
        	console.log(json.cpfok); 
        	}        	
    });
});

Se o código ficar assim:

  $('#cpfcomprador').blur(function() {  
    $.ajax({	    	
    	//dataType: 'json',
    	url: 'validar',
        type: 'POST',	            	
        data: 'cpf='+$("#cpfcomprador").val(),	       
        success: function(cpfok){
        	console.log(cpfok); 
        	}        	
    });
});

Então retorna o seguinte resultado, mas não consegui trabalhar com “if…else…”

Seu código no php/codeigniter não está imprimindo apenas json, verifique se não há outro ponto onde exista echo, print, printf, print_r, var_dump, die, exit, etc ou até mesmo html puro…

Perceba que nesse último retorno logo no começo há o trecho:

{"cpfok":false}

Ou seja, o objetivo está sendo alcançado, o fato de você usar dataType: ‘json’ no ajax faz você obrigatoriamente retornar apenas json pelo php pegou?

Qualquer coisa que não seja json o dataType não consegue converter e no seu caso além do json, está retornando html junto.