alves077 Posted April 4, 2013 at 11:19 PM Report #501731 Posted April 4, 2013 at 11:19 PM (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 April 4, 2013 at 11:20 PM by alves077
rperre Posted April 5, 2013 at 09:15 AM Report #501756 Posted April 5, 2013 at 09:15 AM (edited) JSON.stringify() jQuery.ajax jQuery.parseJSON() 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 April 6, 2013 at 07:41 AM by brunoais geshi
alves077 Posted May 3, 2013 at 06:55 PM Author Report #505756 Posted May 3, 2013 at 06:55 PM 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
taviroquai Posted May 3, 2013 at 10:35 PM Report #505772 Posted May 3, 2013 at 10:35 PM Qual é o erro que te dá no js? Estás a definir o header json no php?
alves077 Posted May 3, 2013 at 11:02 PM Author Report #505777 Posted May 3, 2013 at 11:02 PM (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 May 4, 2013 at 04:16 PM by alves077
Paulo Cabral Posted May 4, 2013 at 05:33 PM Report #505825 Posted May 4, 2013 at 05:33 PM que tipo de dados de dados estas a retornar do php? podes por aqui o que o ficheiro php retorna?
alves077 Posted May 4, 2013 at 05:41 PM Author Report #505826 Posted May 4, 2013 at 05:41 PM (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 May 4, 2013 at 05:42 PM by alves077
malleus Posted May 9, 2013 at 04:57 PM Report #506477 Posted May 9, 2013 at 04:57 PM 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").
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now