Visualizzazione risultati 1 fino 13 di 13

Discussione: Javascript: problemi con XMLHttpRequest

  1. #1
    Guest

    Question Javascript: problemi con XMLHttpRequest

    Salve a tutti,
    sono nuovo della comunity. Sto cercando di relizzare un sito basandomi su Ajax.

    Ho necessità pertanto di leggere un file xml; per farlo uso la funzione javascript XMLHttpRequest; tuttavia quando la lancio mi viene riportato il seguente errore:

    "autorizzazione negata"

    Qualcuno può gentilmente aiutarmi con qualche suggerimento?

    Grazie 1000!!

  2. #2
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Credo che il motivo per il non funzionamento sia che le connessioni verso l'esterno su AlterVista non sono permesse.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  3. #3
    Guest

    Predefinito

    mmm però bisogna vedere se l'errore è in fase di esecuzione dello script php oppure di quello js.

    Posta lo script in oggetto e ci diamo un'occhiata.


    Ciaoo!!!

  4. #4
    Guest

    Unhappy

    Lo so che le connessioni verso l'esterno su altervista non sono consentite, ma pensavo che fosse valido solo per il php.
    Il mio script è interamente in javascript, quindi la connessione non viene fatta dal php (che per ora ho deciso di non usare). In pratica la connessione al server esterno dovrebbe essere eseguita direttamente dal client dell'utente!

    Il codice che utilizzo per la connessione è il seguente:

    Codice:
    <script LANGUAGE="javascript">
    var req;
    var isIE = false;
    
      function connessione() {
        if(document.forms[0].user.value=='') {
           alert('Inserisci il nome utente!'); return;
        }
        if(document.forms[0].passwd.value=='') {
           alert('Inserisci la password!'); return;
        }
        var url = '[....]' // url con l'xml
        try {
          loadXMLDoc(url);
        } catch(e) {
          alert('Impossibile leggere il file xml: ' + e.message);
        }
      }
    
      function loadXMLDoc(url) {
        if(window.XMLHttpRequest) {
          req = new XMLHttpRequest();
          req.onreadystatechange = processReqChange;
          req.open("GET", url, true);
          req.send(null);
        } else if(window.ActiveXObject) {
          isIE = true;
          req = new ActiveXObject("Microsoft.XMLHTTP");
          if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
            }
        }
      }
    
      function processReqChange() {
        if(req.readyState == 4) {
          if (req.status == 200) {
            readXml();
          } else {
            alert("Errore nel recupero del file xml:\n" + req.statusText);
          }
        }
      }
    [...]
    L'errore che scatta è quello nel try-catch presente all'interno della funzione connessione(). Devo dire che ho provato a far girare la pagina in locale e non ho riscontrato nessun problema!
    Ultima modifica di debug : 29-07-2006 alle ore 20.40.51

  5. #5
    Guest

    Predefinito

    Potresti postare anche i richiami a tali funzioni con relativi argomenti?
    Ho paura che la funzione js passi come argomento una pagina php e che quindi il parser js passi il comando al parser php per eseguire le istruzioni...


    Ciaooo!!!!!!

  6. #6
    Guest

    Smile

    La funzione connessione() è la prima che trovi nel listato. L'url al quale si connette è il seguente:

    Codice:
    var url = 'http://www.pmanager.org/get_data.asp?type=2&username=' + document.forms[0].user.value +
          '&password='+ document.forms[0].passwd.value + '&program_id=xxxx&language=5';
    L'xml è fornito da una pagina asp.

    Al posto di xxxx va un codice personale (fisso) che preferisco non postare!

    In effetti però non capisco come mai il js dovrebbe passare la richiesta al php... sul mio pc non ho neppure installato il php, come mai funziona? Oppure forse questa è un'impostazione settata sui server di altervista?

    In ogni caso grazie davvero dell'aiuto e del tempo perso!

    P.S. La funzione readXML() non credo che sia importante; non la posto perchè è molto lunga, ma non fa altro che leggere l'xml e costruire una tabella html con i dati. L'errore in ogni caso si verifica prima secondo me!

  7. #7
    Guest

    Predefinito

    mmm di sicuro è che le connessioni verso l'esterno via js sono abilitate, a meno che non ci sia un problema tecnico sul server dove risiedi.

    La funzioni che citi, readXML(), fa uso di richieste php?
    Cioè vorrei capire se tutto il sistema che stai usando fa uso o meno di linguaggi server (asp o php).
    Però se mi dici che provandolo sul tuo pc dove non hai installato un web server (quindi nemmeno IIS per asp) il tutto funziona... allora è veramente strana la cosa!

    Dovresti fare un test, può essere un po' rompiscatole, ma almeno toglierà un po' di dubbi; dovresti installare/avviare un programma tipo rss2javascript, che fa uso esclusivamente di javascript, così da capire se le connessioni esterne in js avvengono senza problemi. Questo programma è un lettore di feed rss che usa, appunto, solo js, quindi è perfettamente usabile qui su AV.
    Facendo una rapida ricerca qui sul forum o sul web lo trovi sicuramente.


    Ciaooo!!!!!!!!

  8. #8
    Guest

    Arrow

    Sul mio pc non ho installato nessun tipo di web server, nè asp (che neppure conosco) nè php (che conosco, ma viste le limitazioni su altervista, ho deciso di non utilizzare).

    In ogni caso provo subito a seguire il tuo consiglio.
    Intanto posto anche il resto del codice.
    Questa di seguito è la funzione readXML(), scusatemi se è un po' lunghetta!

    Codice:
      function readXml() {
        var style = "row1";
        var oRow, oCell, stringa;
        var rows = req.responseText.split('\r\n');
        var counter=0;
        for(a=0;a<rows.length;a++) {
        stringa = rows[a].replace(/\s+$|^\s+/g,"");
          if(stringa.indexOf("<player_name>")!=-1) {
             oRow = players_table.insertRow();
             oRow.className = style;
             oCell = oRow.insertCell();
             oCell.innerHTML ="<input type='radio' value='P' title='Schierato in porta' class='radio' name='"+ counter + "'>"+
                      "<input type='radio' value='D' title='Schierato in difesa' class='radio' name='"+ counter + "'>"+
                      "<input type='radio' value='C' title='Schierato a centrocampo' class='radio' name='"+ counter + "'>"+
                      "<input type='radio' value='A' title='Schierato in attacco' class='radio' name='"+ counter + "'>"+
                      "<input type='radio' value='NG' title='Non gioca' class='radio' name='"+ counter + "'>";
             oCell = oRow.insertCell();
             oCell.innerHTML = stringa.replace("<player_name>|</player_name>","");
    
             if(style=="row1") style="row2";
             else style="row1";
          }
          if(stringa.indexOf("<position_full>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(15, stringa.length-16);
          }
          if(stringa.indexOf("<form>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = forma[stringa.substring(6, stringa.length-7)];
          }
          if(stringa.indexOf("<fitness>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(9, stringa.length-10);
          }
          if(stringa.indexOf("<handling>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(10, stringa.length-11);
            temp.push(stringa.substring(10, stringa.length-11));
          }
          if(stringa.indexOf("<crosses>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(9, stringa.length-10);
            temp.push(stringa.substring(9, stringa.length-10));
          }
          if(stringa.indexOf("<reflexes>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(10, stringa.length-11);
            temp.push(stringa.substring(10, stringa.length-11));
          }
          if(stringa.indexOf("<agility>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(9, stringa.length-10);
            temp.push(stringa.substring(9, stringa.length-10));
          }
          if(stringa.indexOf("<tackling>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(10, stringa.length-11);
            temp.push(stringa.substring(10, stringa.length-11));
          }
          if(stringa.indexOf("<heading>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(9, stringa.length-10);
            temp.push(stringa.substring(9, stringa.length-10));
          }
          if(stringa.indexOf("<passing>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(9, stringa.length-10);
            temp.push(stringa.substring(9, stringa.length-10));
          }
          if(stringa.indexOf("<positioning>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(13, stringa.length-14);
            temp.push(stringa.substring(13, stringa.length-14));
          }
          if(stringa.indexOf("<finishing>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(11, stringa.length-12);
            temp.push(stringa.substring(11, stringa.length-12));
          }
          if(stringa.indexOf("<technique>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(11, stringa.length-12);
            temp.push(stringa.substring(11, stringa.length-12));
          }
          if(stringa.indexOf("<speed>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(7, stringa.length-8);
            temp.push(stringa.substring(7, stringa.length-8));
          }
          if(stringa.indexOf("<strength>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(10, stringa.length-11);
            temp.push(stringa.substring(10, stringa.length-11));
            squadra.push(temp);
            temp=new Array();
            counter++;
          }
          if(stringa.indexOf("<experience>")!=-1) {
            oCell = oRow.insertCell();
            oCell.innerHTML = stringa.substring(12, stringa.length-13);
          }
        }
      }
    Come si può vedere non fa altro che "parsare" l'xml anche se in una maniera poco canonica! "Temp" e "squadra" sono degli array globali javascript all'interno dei quali vado a memorizzare i valori letti dall'xml.

    Un'ultima cosa: la pagina che faccio girare ha estensione .html, quindi non fa uso di nessun linguaggio di server-script!
    Grazie ancora per la pazienza!!

  9. #9
    Guest

    Predefinito

    Prova a copiarci tutta la pagina html magari c'è qualcosa lì

  10. #10
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    no, credo che il problema sia un'altro: le chiamate XMLHTTPRequest non possono uscire dal dominio - se la pagina che stai guardando e' su tuosito.altervista.org, il javascript non puo' chiamare www.altrosito.com e richiedergli dei dati.

    Il blocco e' li per sicurezza, ed e' implementato nei browser. Ci sono alcuni metodi per aggirarlo: con mod_rewrite o con un iframe ad esempio. Altre informazioni le trovi cercando "cross domani xmlhttprequest" :)

  11. #11
    Guest

    Predefinito

    thepiratebay provato a visualizzarlo con altri browser, magari è il browser che utilizzi che lo blocca per sicurezza...

  12. #12
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Io escluderei completamente le limitazioni o configurazione di altervista, visto che è un client che tenta di raggiungere un altro url, AV non è interpellata in questo passaggio.

    Personalmente ho provato una user/pass fasulla nel tuo login, sia con IE6 sia con Mozilla e il messaggio che dici tu "autorizzazione negata" io non l'ho visto!
    Vedo quello del try-catch:
    IE: Impossibile leggere il file xml: Nome sconosciuto
    Moz: Impossibile leggere il file xml: undefined

    (???)
    non mi ricordavo se era di preciso "Nome sconosciuto" (messaggio che mi dà usando test/test) quindi ho riprovato user/pwd a caso e invece mi ha scritto: Impossibile leggere il file xml: Autorizzazione Negata

    Mah
    di solito questo è il messaggio che dà quando tenti di accedere a proprietà di oggetti a cui non puoi accedere per ragioni di sicurezza (per es. mettere un iframe che visualizza un sito esterno, e poi entrare tramite javascript nell'iframe e nel document caricato al suo interno).

    ho provato a cercare "Autorizzazione negata" nella casella di ricerca "Search Microsoft.com for:" sul loro sito ma ci sta mettendo oltre 10 minuti, chiudo... quindi come al solito, grazie MS!
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  13. #13
    Guest

    Lightbulb

    Ciao a tutti e grazie soprattutto a quelli che hanno cercato di aiutarmi!

    Innanzi tutto una breve risposta a heracleum! Alcune volte l'errore che vedo a video è quello che dici tu, altre volte invece mi compare direttamente "autorizzazione negata".

    Grazie al suggerimento di dreadnaut, ho cercato di informarmi sul "cross domain": ci sono infatti delle impostazioni di sicurezza del browser che impediscono di andare a leggere l'xml con il comando in questione da un dominio diverso da quello corrente!
    Purtroppo non ho trovato il modo di disabilitare sul mio browser questa restrizione.

    In ogni caso l'unico work-around per questo tipo di situazione è usare il php per andare a leggere altrove l'xml, in modo che per il javascript l'xml risulti nel dominio "giusto".
    Tuttavia questa situazione è uguale a quella del serpente che si morde la coda: ho cercato di usare javascript per evitare le restrizioni sui wrapper del php e mi servono questi ultimi per superare le restrizioni del javascript... in bel paradosso insomma!

    Quindi credo che la mia idea non sarà fattibile.
    Mi chiedo come mai esistano questo tipo di restrizioni sui wrapper, le mie intenzioni sono legali e non vanno a creare nessun tipo di danno. C'è nulla che io possa fare per utilizzare su altervista i wrapper http?
    (magari qui può rispondermi qualche moderatore o amministratore!!)

    Grazie 1000!!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •