Jump to content
alves077

[Dúvida] json + ajax

Recommended Posts

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

Edited by alves077

Share this post


Link to post
Share on other 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);
                }
        });
});
});

Edited by brunoais
geshi

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Edited by alves077

Share this post


Link to post
Share on other sites
Paulo Cabral

que tipo de dados de dados estas a retornar do php?

podes por aqui o que o ficheiro php retorna?

Share this post


Link to post
Share on other 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

Edited by alves077

Share this post


Link to post
Share on other 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").

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.