Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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"}]
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:
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/5WKdLJM.jpg&key=6ed1e41c4e4df3f9b6795b3c6feef72e7b117799c5c84b678c7013febd03e580" alt="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();
}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"
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);
}
}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
kkkkkk /o/ lokura...
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:
/applications/core/interface/imageproxy/imageproxy.php?img=https://raw.githubusercontent.com/gabrieldarezzo/gabrieldarezzo.github.io/master/imasters/img/ajax_fluxo.png&key=febc6e8e80f3ce22d3d302b6219f8da9c4fa921550e7b98eeaa7bd1f4da078bc" alt="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>
Bom Debbug