Jump to content

Recommended Posts

Posted (edited)

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

Edited by alves077
Posted (edited)

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);
                }
        });
});
});
Edited by brunoais
geshi
  • 4 weeks later...
Posted

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

Posted (edited)

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

Edited by alves077
Posted (edited)

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

Edited by alves077
Posted

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").

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.