Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

userFeliz

Problemas com JSON

Recommended Posts

Olá

 

Fiz alguns sistemas de busca com JSON e no servidor local funcionou normalmente, porém quando subo pra um servidor externo me retorna o seguinte erro no console:

 

 

Uncaught SyntaxError: Unexpected token  in JSON at position 0

 

código JS:

		$("input[name=product_name]").keyup(function(){
			if($(this).val() != ''){
				$.ajax({
					url: "<?php echo site_url('/StockController/searchProductStock')?>",
					type: "POST",
					cache: false,
					data: {name_product: $(this).val()},
					success: function(data){
						$('#loadProduct').html("");
						var obj = JSON.parse(data);
						if(obj.length>0){
							try{
								var items=[]; 	
								$.each(obj, function(i,val){											
									items.push($("<option id="+ val.id_product +">"+ val.name_product +"</option>"));
								});	
								$('#loadProduct').append.apply($('#loadProduct'), items);
							}catch(e) {		
								alert('Ocorreu algum erro ao carregar os Produto!');
							}		
						}else{
							$('#loadProduct').html($('<span/>').text("Nenhum Produto encontrado!"));
						}		
					},
					error: function(data){
						alert("Ocorreu algum erro ao carregar os Produtos");
					}
				});
			}else{
				$('#loadProduct').html(" ");
			}
		});

o PHP (data) retorna isso para o JSON:

 

 

[{"id_product":"142","name_product":"Carregador de Celular Gen\u00e9rico","unit_price":"10.00"},{"id_product":"143","name_product":"Arroz Itatibaia","unit_price":"4.00"},{"id_product":"145","name_product":"Feij\u00e3o","unit_price":"10.99"},{"id_product":"146","name_product":"pao","unit_price":"12.00"}]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, primeiro passo que eu fiz foi 'passar' num validador o seu JSON e estava correto.

 

algumas coisas que me chamaram atenção no seu script:

-> Ausência do dataType

dataType: 'json',

-> Ausência de 'Early return' (Simplifica chessus, Simplifica chessus)

 

Ainda sobre seu script, você disse que localmente funciona oq pode significar que a resposta dada no servidor pode estar errada.

 

Um exemplo de como checar a mesma:

ajax_fluxo.png

 

 

Verifique se sua resposta do JSON é a esperada.

 

 

Fiz uma simplificação do seu código aqui:

 

(Crie um arquivo 'dados.json' apenas para o teste funcionar)

<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title></title>
</head>
<body>
	
	<input type="text" name="product_name" id="product_name" />
	
	<select name="produto" id="produto"></select>
	
	<script src="../js/lib/jquery-1.10.2.js"></script>
	<script type="text/javascript">
		$(document).ready(function() {
		
			
			// $( "#product_name" ).bind( "keyup", function() {
				// if($(this).val() != ''){
					$.ajax({
						url: "dados.json",
						// type: "POST",
						cache: false,
						dataType: 'json',
						// data: {name_product: $(this).val()},
						success: function(data){
							if(data.length == 0){
								$('#loadProduct').html($('<span/>').text("Nenhum Produto encontrado!"));
								return false;
							}
							
							$(data).each(function(i, element){
								$('#produto').append($('<option>', { 
									value: element.id_product + ' ' + element.unit_price,
									text : element.name_product 
								}));
							});
						},
						error: function(data){
							alert("Ocorreu algum erro ao carregar os Produtos");
						}
					});
				// }else{
					// $('#loadProduct').html(" ");
				// }
			// });
		});
	</script>
</body>
</html>

Bom Debbug

Compartilhar este post


Link para o post
Compartilhar em outros sites

A resposta esta correta...

 

porém não funciona quando coloco o

dataType: "json"

ele sempre entra no error do ajax e a data me retorna isso:

5WKdLJM.jpg

 

meu código php (CodeIgniter):

 

Controller:

	public function searchProductStock() {
		$search = $this->input->post('name_product');
		$result = $this->StockModel->getProductSearch($search);
		echo json_encode($result);
	}

Model:

	public function getProductSearch($searchString) {
		$this->db->select("id_product, name_product, unit_price");
		$whereCondition = array('name_product' =>$searchString);
		$this->db->like($whereCondition);
		$this->db->from('stock_products');
		$query = $this->db->get();
		return $query->result();
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vish C.I.

 

Eu já enfrentei esse problema uma vez.

Depois de gastar umas 6hrs em cima disso, resolvi fazer o tratamento dentro do próprio 'error'.

},error: function(jqXHR, textStatus, errorThrown) {
	
	//Não sei pq ocorre um \ufeff, já verifiquei o coding, coloquei header, alterei o metodo ajax. sei lá
	//Assim funciona como 'esperado'
	if(jqXHR.responseText){
		//Equivalente ao trecho ",success: function( out ) {"


	}
	
	// console.log(jqXHR);
	// console.log(textStatus);
	// console.log(errorThrown);
}

Vou ficar de olho no seu post se alguém der uma letra aprendo a resolver da forma correta haha.

Abraços.

 

Edit:

Pode reparar na aba 'text'/ da resposta http que ocorre uns carácteres maluco "\ufeff"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá. Bom caras eu já passei muito com esses problemas aew e sempre é a codificação utf-8, bom não sei se isso pode ajudar mais eu estava com um problema desse e fiz assim e funcionou.

 

public function actionCriartemplate(){
$var = $_GET['cod'];
$string = '';
$string = file_get_contents("json/templates/template$var.json");
$json_output = json_decode($string);
foreach($json_output as $linha){
return json_encode($linha);
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi o problema, mas não sei como kkkkkkkkkkk

 

Era um projeto dividido em duas partes, quando fomos juntar aconteceu isso, no final acabamos fazendo o processo de junção novamente e o problema desapareceu...

 

não sei o que tava acontecendo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.