SELECT DENTRO DE UM LOOP
Estou com um problema que não tenho a menor idéia de como resolver.
Tenho um código em Code Behind que faz um loop em para encontrar em um array, determinados endereços. A medida que vai encontrando esses endereços, aciona uma função em javascript que busca em um banco de dados MySQL informações referente a cada endereço encontrado. O problema é que o loop chega ao final antes de aparecer o primeiro resultado do primeiro endereço e quando esse resultado chega é do último endereço informado.
Segue uma ilustração do código que estou usando.
do until idx = NumeroDeLinhasDoArray
if endereço <> [Ô][Ô] then
txtEndereço.text = endereço [ô]aqui joga o endereço em um textbox para a função javascript capturar
ScriptManager.RegisterStartupScript(Me, Me.GetType(), [Ô]MinhaFunção[Ô], [Ô]BuscaInfo();[Ô], True) [ô]aciona a função javascript
end if
idx = idx + 1
loop
A questão é, como fazer essa sequência de select dentro de um loop ???
Em nenhum momento você está passando algum valor para a variável [Ô]endereco[Ô]
Coloque isso após iniciar o loop:
endereço = SeuArray(idx)
Não entendi porque você joga para um textbox para depois rodar uma função javascript. Mesmo usando o método RegisterStartupScript, você ainda pode rodar funções javascript passando parâmetros.
Outra coisa que não entendi, é o fato de usar javascript para conexão com banco de dados MySQL. Sou meio novato com web ainda, mas javascript não é só client-side? Por que não conecta com asp mesmo?
Abraços
Vamos lá:
Citação:Em nenhum momento você está passando algum valor para a variável [Ô]endereco[Ô]
Na verdade eu coloquei apenas uma idéia de como funciona o código. No código correto o endereço esta sendo carregado exatamente como você sugeriu.
Citação:Não entendi porque você joga para um textbox para depois rodar uma função javascript. Mesmo usando o método RegisterStartupScript, você ainda pode rodar funções javascript passando parâmetros.
Trabalho relativamente bem no Code Behind porque é muito parecido com VB6. JavaScript pra mim é grego, mas foi o único jeito que descobri de como acessar a API do google maps. Jogo o endereço no TextBox porque foi o jeito que descobri de pegar os valores:
var endereço = document.getElementById([ô]txtEndereco[ô]).value;
Citação:Outra coisa que não entendi, é o fato de usar javascript para conexão com banco de dados MySQL. Sou meio novato com web ainda, mas javascript não é só client-side? Por que não conecta com asp mesmo?
Porque a maior parte dos parâmetros que preciso para realizar a consulta MySQL é gerada pelo javascript que acessa a API do google maps. Se eu soubesse como trazer esses parâmetros para o code behind seria muito mais fácil prá mim.
Meu código funciona quando faço uma consulta para cada endereço, mas quando jogo no loop...
Eu acho que esse loop deveria ser feito no javascript e não no code behind, mas não sei fazer isso
Citação:http://vbmania.com.br/index.php?modulo=forum&metodo=abrir&id=453325&mundo=2&ultimapagina=1
Vamos trabalhar em cima disso então, apesar de não ser o método mais recomendado... vai quebrar seu galho.
Existem alguns meios de pegar um valor de uma função javascript.
O que eu recomendo é que depois de você pegar os dados que você precisa da api do googlemaps, você envie para o servidor pra trabalhar no code behind.
Realize os seguintes passos:
1 - Referencie a biblioteca JQuery no seu código client-side.
2 - Crie um método público estático no code behind com o atributo WebMethod e um parâmetro chamado ParametroRetorno
3 - No client-side, assim que você pegar os dados que precisa, jogue para o servidor através de uma requisição:
$.ajax({
type: [Ô]POST[Ô],
url: [Ô]SUA_PAGINA.aspx/NOME_DO_SEU_METODO_ESTATICO[Ô],
data: [ô]{ParametroRetorno: [Ô][ô] + VARIAVEL_COM_SEUS_DADOS + [ô][Ô] }[ô],
contentType: [Ô]application/json; charset=utf-8[Ô],
dataType: [Ô]json[Ô]
});
Quando isso rodar, vai mandar a requisição pro servidor e ele vai chamar a função estática que você declarou. Os dados que você passou, vao estar no parâmetro da função. Aà você faz o que quiser com ela.
Espero ter ajudado!
E sobre o ASP.NET com WebForms... recomendo que estude bastante o ciclo de vida da página. Acho que isso é o que mais confunde os programadores que estão acostumados com WinForm. Mas depois que você entende, fica bem mais fácil.
Tentei o seguinte sem sucesso:
Dim SplitOS() As String
SplitOS = Split(LblConteudo.Text, [Ô],[Ô])
ScriptManager.RegisterStartupScript(Me, Me.GetType(), [Ô]myFunction[Ô], [Ô]codeAddress([ô][Ô] & SplitOS & [Ô][ô]);[Ô], True)
Isso não funcionou. Qual é o jeito certo de fazer isso???
So para testar, joguei os valores em um listbox (no code behind tudo funciona perfeitamente) e tentei fazer um loop nesse listbox pelo javascript:
var ArrayList = document.getElementById([ô]ListBox1[ô]).value;
for (i = 0; i < ArrayList.length; i++) {
alert(ArrayList.options[i].innerHTML);
alert(ArrayList.options[i].text);
alert(ArrayList.options[i].value);
alert(ArrayList.options[i].item.value);
}
Existem 1.600.000 exemplos parecidos com esses acima. Tentei um por um, mas nenhum desses [Ô]alert[Ô] funcionou
Gente??? Que mistério é esse???
O código está sendo disparado? Isto é, se você colocar um alert antes do for, ele vai disparar?
Segundo:
Tente mudar essa parte:
var ArrayList = document.getElementById([ô]ListBox1[ô]).value;
for (i = 0; i < ArrayList.length; i++) {
Para isso:
var ArrayList = document.getElementById([ô]ListBox1[ô]);
for (i = 0; i < ArrayList.options.length; i++) {
Se não vai de um jeito, vai de outro e as vezes, de um jeito bem mais simples.
Por enquanto, resolvi da seguinte maneira. Transformei o array em string; Joguei a string no javascript; Fiz um split e depois o loop:
Citação:<script type=[Ô]text/javascript[Ô]>
function codeAddress2(conteudo) {
var ArrayList = conteudo.split([Ô];[Ô])
for (var i in ArrayList) {
alert(ArrayList[i]);
}
}
</script>
FUNCIONOU!!!
Vou manter o tópico aberto ainda por mais um dia para ver se não aparece mais alguma dúvida, mas já quero lhe agradecer DS2T pelo carinho e atenção comigo.
VALEU!!!