Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Problema richiamo web service

    Ciao a tutti,
    sto cercando di implementare tramite jquery, una textbox autocomplete; purtroppo però nonostante la chiamata ajax funzioni, non riesco ad accedere al webservice.

    Infatti impostando un break point al suo interno, vedo che non ne ottengo l'esecuzione. Se vado a verificare la chiamata con firebug, sulla scheda console... ottengo come risposta l'errore 500.

    Da cosa potrebbe dipendere?
    Ogni popolo ha il governo che si merita...

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    120
    Come provi ad accedere al web service? Metti il codice Javascript
    Nel frattempo ( se non l'hai già fatto ) installa firebug ( estensione di Firefox che ti permette di debuggare JS, vedere l'html, controllare le chiamate realmente effettuate, i dati passati e le risposta )

    In generale, cmq, se nella tua solution c'è un web service ( mettiamo sia la classe MioServizio con il metodo MioMetodo(parametro) ) e in pagina hai uno scriptmanager, dovresti poter chiamare da JS

    codice:
    MioServizio.MioMetodo('pippo');

  3. #3
    Allora questa è tutta la mia parte di codice interessata... questo è il javascript...

    codice:
    <script type="text/javascript">
            $(document).ready(function () {
                $(".tb").autocomplete({ 
                    source: function (request, response) { 
                        $.ajax({ 
                            type: "POST", 
                            contentType: "application/json; charset=utf-8",
                            url: "AutoCompleteDataSource.asmx/SuggestedCustomers", 
                            dataType: "json", 
                            data: "{'Value':'" + request.term + "'}", 
                            success: function (data) { 
                                    response($.map(data.d, function (item) { 
                                        return { 
                                            label: item.Name + '(' + item.Value + ')', 
                                            value: item.Name 
                                        } 
                                    })) 
                            } 
                        }); 
                    }, 
                    minLength: 2, 
                    select: function (event, ui) { 
                         
                    }, 
                    open: function () { 
                        $(this).removeClass("ui-corner-all").addClass("ui-corner-top"); 
                    }, 
                    close: function () { 
                        $(this).removeClass("ui-corner-top").addClass("ui-corner-all"); 
                    }, 
                    error: function (XMLHttpRequest, textStatus, errorThrown) { 
                        alert(textStatus); 
                    } 
                }); 
     
            }); 
        </script>
    la mia textbox

    codice:
    <asp:TextBox ID="AutoCompleteText" runat="server" CssClass="tb"></asp:TextBox>
    il webservice

    codice:
    [WebMethod]
        public string[] SuggestedCustomers(string q)
        {
            connStr = ConfigurationManager.ConnectionStrings["ACOConnectionString"].ConnectionString;
            conn = new SqlConnection(connStr);
    
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "SELECT idGalleria, Titolo FROM Galleria WHERE Titolo LIKE '%" + q +"%'";
            cmd.Connection = conn;
            List<string> items = new List<string>();
            try
            {
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                // Add items into string array
                
                while (reader.Read())
                {
    
                    items.Add(reader["idGalleria"].ToString() + " " + reader["Titolo"].ToString());
                }
    
                // Return array
                return items.ToArray();
            }
            catch (Exception ex)
            {
                items.Add(ex.ToString());
                return items.ToArray();
            }
        }
    Ogni popolo ha il governo che si merita...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    120
    1) Ti ripeto il consiglio di usare firefox/firebug per lavorare con js, e avere la certezza di come si evolvono le chiamate
    2) Dato che lavori in ASP.NET ti consiglio di sfruttarne le facility : il modo più semplice è sfruttare le web extensions e ( come detto in precedenza ) chiamare direttamente il WS sfruttando la rappresentazione JS che lo ScriptManager ti mette a disposizione in pagina
    3 ) Nel tuo codice non capisco cosa dovrebbe agganciare la chiamata al WS. Anzitutto 'autocomplete' ( a che io so ) è una proprietà dei campi input type='text' che indica al browser se riproporre la cronologia dei dati postati tramite quel campo. In ogni caso mi aspetterei di vedere una funzione agganciata all'evento keypress o textchange del campo input, cosa secondo te dovrebbe scatenare la chiamata del WS?

  5. #5
    Si... ma infatti utilizzavo firebug; ho messo il break point proprio su questa istruzione qui... che dovrebbe far partire la chiamata ajax al webservice(se non sbaglio)

    codice:
    $.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "http://localhost:54589/ACO/AutoCompleteDataSource.asmx", 
    
    etc...
    ...
    ...
    ...
    e non appena digito più di due caratteri come specificato nei parametri della funzione passo su quel break point.

    Quindi la chiamata avviene... solo che non capisco perchè non acceda al webservice...
    Ogni popolo ha il governo che si merita...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    120
    ma se ti fermi al breakpoint allora puoi debuggare il js
    Se vai avanti con F10 arrivi alla fine della funzione e non c'è nessun errore?
    Nella scheda "Net" di firebug vedi effettivamente partire una chiamata di rete?
    Se sì, verso che indirizzo? Cosa posti? Cosa ti risponde?

    Hai provato ad effettuare la chiamata in GET anziché in POST?
    Si comporta uguale? Se in GET funziona forse devi abilitare il protocollo HttpPost dal web config



    Codice PHP:
    <webServices>
          <
    protocols>
            <
    add name="HttpGet"/>
            <
    add name="HttpPost"/>
            <
    add name="HttpSoap"/>
            <
    add name="HttpPostLocalhost"/>
            <
    add name="Documentation"/>
          </
    protocols>
        </
    webServices>
      </
    system.web

  7. #7
    Allora...

    Ho debuggato e l'esecuzione procede fino all'istruzione success... dopodichè esce dall'autocomplete...

    Ho provato anche a mettere il metodo GET... ma non cambia nulla...
    Ogni popolo ha il governo che si merita...

  8. #8
    Infatti , non puoi usare un server control da utilizzare poi con una tecnica ajax.
    Se tu usi il controllo <asp:TextBox> generi il postback e la chiamata ajax va a farsi benedire.
    Al posto di un server control devi usare degli elementi html puri , quindi una <input type="text"> per inserire la parola e un semplissimo <div> nel quale poi visualizzi i risutati che ti arrivano dalla chimata ajax. Il resto del codice l'ho guardato e mi sembra tutto apposto.
    Comunque ti consiglio di fare questi cambiamenti , anzi li devi fare necesariamente , altrimenti devi usare un updatepanel e dimenticare jquery-javascript.
    Io ti consiglio di rimanere su jquery. Se comunque non riesci a risolvere posta un messaggio , ti faccio vedere come fare. Ciao.
    Sul mio blog qualche utile risorsa per JQuery, HTML5 , CSS3 , PHP , ASP.NET , WCF SERVICE REST & SOAP ed altro ancora http://zannino1973.wordpress.com

  9. #9
    Grazie amico!!!

    Stasera lo provo immediatamente... spero tanto che funzioni!!
    Ogni popolo ha il governo che si merita...

  10. #10



    Non funziona... o sono io che sono un pirla... o c'è qualcosa che non va... (Forse però è probabile la prima)
    Ogni popolo ha il governo che si merita...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.