[VB.NET] webbrowser e chiamata ajax

martedì 28 ottobre 2008 - 11.32

bmwww Profilo | Newbie

ciao a tutti, spero che qualcuno mi possa siutare a risolvere un problema!

ho creato un applicazione che tramite un webbrowser completa dei campi di una pagina internet. il problema è che devo sceigliere da una lista ("SELECT") il produttore, invocare due javascritp che fanno una chiamata ajax e recuperano i modelli per quel produttore.
sono riuscito a selezionare il produttore, fare le due chiamate javascript ma qui compare il mio problema: se dopo le chiamate ai due javascritp inserisco un msgbox() che interrompe l'esecuzione allora subito dopo leggendo la "SELECT" con tutti i modelli trovo dentro i valori, se non interrompo con il msgbox() e leggo subito la "SELECT" la trovo vuota....

qualcuno ha idea di cosa posso fare ??? grazie!

luigidibiasi Profilo | Guru

Forse così senza codice è un pò difficile aiutarti comunque giusto per far funzionare il tutto puoi pensare di lanciare la fase di lettura dalla select dopo X secondi utilizzando setTimeout('return nomefunzione();',5000);




Luigi Di Biasi

bmwww Profilo | Newbie

ciao, intanto ti ringrazio per l'aiuto!

con questo pezzo di codice vado a selezionare il produttore (SELECT con NAME='select_marca') e subito dopo aver selezionato la marca richiamo i javascript invocando l'evento "onBlur" e l'evento "onClick" ... in pratica simulo la selezione dalla lista da parte dell'utente..... e fin qui tutto funziona, viene scielta la marca e viene fatta la chiamata ajax che recupera i modelli per una determinata marca!

' select [MARCA AUTO] elementi = doc.GetElementsByTagName("SELECT") For i As Integer = 0 To elementi.Count - 1 elemento = elementi.Item(i) If elemento.GetAttribute("name") = "select_marca" Then elemento.SetAttribute("value", "000101 ") ' richiamo il javascript per il recupero dei modelli elemento.InvokeMember("onBlur") elemento.InvokeMember("onclick") End If Next

il problema viene nella lettura dei modelli che faccio con questo codice:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

se prima della lettura del SELECT con NAME='select_modelli' metto un msgbox("") che interrompe l'esecuzione allora appena lo chiudo trovo tutti i modelli, se non metto niente e leggo direttamente la SELECT la trovo vuota.... Adesso ho interrotto mostrano uno Dialog in una coordinata fuori dal monitor e chiudendolo con un timer ma come soluzione non mi piace proprio.... vorrei riusire a fare tutto senza "imbrogliare"....


p.s. ho pure metto uno sleep si qualche secondo fra un istruzione e l'altra ma non cambia niente....


...aiutooooo!! :-)

bmwww Profilo | Newbie

...nessuno ha qualche idea !?!?!

luigidibiasi Profilo | Guru

L'idea che mi sono fatto io è questa:

Utilizzi ajax per il recupero dei dati.... fai l'invoke dei due metodi per recuperare il tutto però appena lanciato il metodo di recupero vai a leggere subito i dati prima che siano arrivati questo perché, credo, l'esecuzione è asincrona e durante l'esecuzione dei metodi onblur e onclick il restante codice js viene comunque eseguito. (ecco xè se stoppi e continui và tutto bene)

Probabilmente ci sarà un parametro (di cui non conosco il nome) da passare via codice in modo da far richiamare la funzione di callback di lettura dei modelli (da scrivere a parte e non di seguito all'altro codice) solo dopo che sono arrivati i dati.

Tu il secondo pezzo di codice dove lo scrivi? subito dopo il next del primo?
Luigi Di Biasi

bmwww Profilo | Newbie

ciao, si i due blocchi di codice sono scritti uno dopo l'altro:

1) seleziono la marca e invoco il javascript

2) seleziono il modello

se fra 1) e 2) metto il msgbox() tutto funziona, sltrimenti se non lo metto non riesco a selezionare il modello e la "SELECT" mi risulta vuota da codice....

il fatto che sia asincrona l'esecuzione è sensato ma non so come fare a intercettare la fine dell'esecuzione della parte ajax per poter cominciare la lettura...

luigidibiasi Profilo | Guru

Devi far riferimento alla specifica di ajax allora perchè sicuramente avrà un modo per specificare quale funzione di callback chiamare.

Io personalmente non uso ajax ma xalp e la funzione per le chiamate asincrone ha questa firma:

invoke('servizio_remoto.aspx',parametri[],_callBack,0);

dove _callBack indica una funzione javascript che viene richiamata in automatico quando la chiamata a servizio remoto e terminata.


Ad esempio:

function carica_dati()
{

// qui inizia a caricare i dati e specifica all'engine quale funzione richiamare quando
// termina.

invoke('remoto.aspx',parametri,_datiCaricati,0);

}

// questa funzione viene richiamata in automatico da xalp quando i dati sono pronti. (li passa tramite l'ggetto _xO)

function _datiCaricati(_xO)
{
// qui eseguo il codice odpo che ha caricato i dati
}

Magari aspettiamo qualcuno che usa ajax che ci indica come richiamare le funzioni di callback.

Luigi Di Biasi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5