Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

D'Emery

Populando SELECT com Jquery e XML

Recommended Posts

Vi que está muito batido o assunto de "Combobox Dinâmico", porém não acho como popular um simples SELECT com Jquery lendo uma página XML.

 

OBS.: Avisando de ante-mão, não tenho conhecimento nem com JS, muito menos com Jquery.

 

Vamos lá!

 

São três páginas:

  • index.php - Essa será aonde terá o SELECT.
  • states.php - Essa é o que cria XML. Só que aqui há um dificultador (ou não). Ele está em outro domínio!
  • state.js - Essa é o código Jquery.

 

INDEX.PHP

 

<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<script type="text/javascript" src="state.js"></script> // Aqui é o código aonde será pego o 
</head>
<body>
<form action="resposta.php" method="post">
  <select name="IdState"> // Não sei se o Jquery é 'Case Sensitive', e muito mesmo pode o NAME ter essa variação de 'CAIXA'
     <option value="">Selecione</option>
  </select>
</form> 
</body>
</html>

 

STATE.PHP - Para poupar código, e o final ele já está aparecendo desse modo.

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<States>
  <State>
     <IdState>17</IdState>
     <nameState>Pernambuco</nameState>
  </State>
</States>

 

STATE.JS - AQUI É O PROBLEMA, COMO FAÇO ISSO?

 

$(document).ready(function(){
$.ajax({
	type : GET,
	URL : 'http://www.outrodominio.com.br/state.php',
	dataType : xml,
	success : function(xml){
		$(xml).find(States).each(function(){
			var nameState = $(this).find(nameState).text();
			var IdState = $(this).find(IdState).text();
			$("select[name=IdState]").append('<option value=' +IdState+ '>' +nameState+ '</option>');
		});
	}
});
})

 

Esse trecho foi copiado, e moldado. Não sei se está correto, mas ele não funciona. Não carrega nada no <SELECT NAME='IdState'>.

 

Se alguém puder ajudar fico grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • states.php - Essa é o que cria XML. Só que aqui há um dificultador (ou não). Ele está em outro domínio!

esse XML não pode estar em outro domínio.

 

Pois por questões de segurança, os browsers não deixam você fazer requisições ajax a domínios externos.

Ou você usa um retorno jSON, ou você terá q fazer um proxy(para trazer o xml para o teu dominio).

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse XML não pode estar em outro domínio.

 

Pois por questões de segurança, os browsers não deixam você fazer requisições ajax a domínios externos.

Ou você usa um retorno jSON, ou você terá q fazer um proxy(para trazer o xml para o teu dominio).

 

E como eu poderia fazer o jSON no XML? Acho que essa solução seria a mais viável!

 

O próprio PHP que carrega o XML, pode fazer isso?

 

Aí, também, o bixo pega quando for para o Jquery. Me acabo aí!

 

Acabei de ver aqui, é simplesmente quando o mostrar o XML pelo PHP, coloca o json_encode().

 

<?php
$XML .= "<?xml version='1.0' encoding='ISO-8859-1'?>";
$XML .= "<States>";
$XML .= "<State>";
$XML .= "<IdState>17</IdState>";
$XML .= "<nameState>Pernambuco</nameState>";
$XML .= "</State>";
$XML .= "</States>";

echo json_encode($XML);
?>

 

Será que essa visão, estaria correta?

 

Daí o Jquery + Ajax se carregaria de "puxar" do domínio o STATE.PHP e decodificar. Mas como seria esse código?

 

Eu já estou fazendo dessa forma, porque o meu servidor de hospedagem se negou a desbloquear o acesso ao meu BD MySQL, desse outro domínio. Por esse motivo estou tendo que fazer páginas que mostrem conteúdo, com uma "key" de acesso, para que no outro domínio eu possa buscar os dados (e até modifica-lós).

 

Como tenho um contrato de 2 anos, e já estão pagos, não tenho como reincidir. Por esse motivo vou ter que achar soluções para meus problemas, que no caso seria de pegar os dados de um domínio para o outro.

 

Bruno você deu até outra opção, a do Proxy, mas seria mais complicado? Não sei nem por onde começar a buscar sobre esse assunto.

 

Peço humildes desculpas por pedir um pouco mais mastigado! Fico grato pela boa vontade, e espero que ajude outros com o mesmo problema!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu faço esse código jSON?

 

Pelo visto eu tenho que codificar o arquivo XML (STATE.php) em jSON e no arquivo Jquery (STATE.js) eu tenho que decodificar para XML e capturar os dados novamente, mas como eu faço isso?

 

Eu já consegui codificar o aquivo STATE.PHP com a função "json_encode()".

 

STATE.JS

 

$(document).ready(function(){
       $.ajax({
               type : GET,
               URL : 'http://www.outrodominio.com.br/state.php',
               dataType : xml,
               success : function(xml){
                       $(xml).find(States).each(function(){
                               var nameState = $(this).find(nameState).text();
                               var IdState = $(this).find(IdState).text();
                               $("select[name=IdState]").append('<option value=' +IdState+ '>' +nameState+ '</option>');
                       });
               }
       });
})

Compartilhar este post


Link para o post
Compartilhar em outros sites
no arquivo Jquery (STATE.js) eu tenho que decodificar para XML e capturar os dados novamente

não.

 

no state.js, você recebe o jSON, e trabalha com jSON. Só isso.

Não precisa voltar para XML(e nem dá).

Compartilhar este post


Link para o post
Compartilhar em outros sites

não.

 

no state.js, você recebe o jSON, e trabalha com jSON. Só isso.

Não precisa voltar para XML(e nem dá).

 

Corretíssimo meu amigo!

 

Arrumei um grande problema... aqui não funfa "json_encode()".

 

Estou tentando de outra forma, porque acho que deve ser muito simples com esse método!

 

Como eu faço o código Jquery via getJSON ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.