Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

alves077

[Dúvida] json + ajax

Mensagens Recomendadas

alves077

Boa noite,

Sou novo nas andanças pelo javascript, bem como pelo ajax, tinha um código em php, para ir buscar dados a uma api,qualquer coisa assim:


$json_output = array();
$jsonurl="https://....%22;
$json=file_get_contents($jsonurl,0,null,null);
$json_output=json_decode($json,true);
$testre=$json_output['name'];

Mas agora preciso transformar a maneira como fazia em php, em js, para usar ajax. Já andei a fazer alguns testes mas nada que grande proveito. Tenho um select onde a ideia é preenche-lo dinamicamente, precisamente com o ajax.


$(document).ready(function(){
  $("#opcao1").change(function(){
  $.ajax({
	 type: "GET",
	 url: ".....",
	 data: null,
	 dataType: "json",
	 success: function(json){
		var options = "";
		$.each(json, function(key, value){
		   options += '<option value"'+key+'">' + value+ '</option>';
		});
		$("#opcao2").html(options);
	 }
  });
  });
});

No url para api já tem os dados todos precisos para a resposta em get's. Só que está difícil chegar uma conclusão proveitosa. Com o mesmo url funciona no php, mas não consigo chegar aos dados no js. Alguém me consegue ajudar, como posso utilizar o ajax?

Obrigado pela atenção,

alves077

Editado por alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rperre

Sugiro que alteres o código para

$(document).ready(function(){
$("#opcao1").change(function(){
        $.ajax({
                type: "GET",
                url: ".....",
                data: null // retira sempre a última virgual nestes parametros, caso contrário não funciona em IE ( 9 - )
//dataType: "json", (isto determina o tipo de dados em ENVIAS)
                success: function(json){
                       var options = "";
json = $.parseJSON(json); // A resposta vem em TEXTO, precisas de fazer DECODE para objecto json.
                       $.each(json, function(key, value){
                        options += '<option value"'+key+'">' + value+ '</option>';
                       });
                       $("#opcao2").html(options);
                }
        });
});
});

Editado por brunoais
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
alves077

Boa tarde,

Desculpem estar a voltar a este tópico, mas a minha dúvida continua. Ainda não consegui o que queria, não consigo chegar aos valores que chego com o código php em cima escrito. Já desenvolvi +/- o código sugerido pelo rperre, mas ainda não consegui, como a minha experiência em ajax é nula, se calhar é melhor começar por ler alguma documentação, alguém consegue aconselhar boa e rápida documentação para a solução que pretendo ?

Obrigado pela atenção,

alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
alves077

Edit:

Estou com um erro a carregar os dados da api externa, ja andei a ver não sei muito bem o que se passa.

Erro:

xmlhttprequest cannot load ... origin ... is not allowed by access-control-allow-origin

Alguém têm ideia como resolver este problema?

Obrigado pela atenção,

alves077

Editado por alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
alves077

o codigo que tenho:


$(document).ready(function(){

$("select").change(function(){

	 $.ajax({
			 type: "POST",
			 url: "...";
			 data: null,
			 success: function(json){
					var options = "";
json = $.parseJSON(json); // A resposta vem em TEXTO, precisas de fazer DECODE para objecto json.
					$.each(json, function(key, value){
					 options += '<option value"'+key+'">' + value.id+ '</option>';
					});
					$("#customers1").html(options);
			 }
	 });
});
});

Onde a api retorna um objecto json. Para aceder com o php faço, por exemplo:


$json_output = array();
$jsonurl="...I";
$json=file_get_contents($jsonurl,0,null,null);
$json_output=json_decode($json,true);

for($i=0;$i<$json_output['Offset']['paginated'];$i++)
{
array_push($teste, array('tipo' => $json_output['Objects'][$i]['route_short_name']);

$j++;
}

Obrigado pela atenção,

alves077

Editado por alves077

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malleus

Erros do tipo "access-control-allow-origin" significam que estás a tentar fazer chamadas ajax a scripts que estão em domínios diferentes...o que é proíbido ao nível do protocolo/browser. Nota que isto pode acontecer mesmo em ambientes de desenvolvimento (localhost é diferente de 127.0.0.1). Se necessitas mesmo de fazer chamadas a domínios diferentes podes usar JSONP (json with padding), creio que o jQuery tem suporte nativo a este formato (dataType: "jsonp").

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.