Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    144

    utilizzo variabile globale $_REQUEST[]

    Ciao a tutti,

    ho un piccolo problema a capire il funzionamento della variabile in oggetto. In particolare ho una pagina HTML in cui faccio una richiesta tramite AJAX ad una pagina PHP:

    codice:
    var par = "XML=get&R=" + encodeURI(encodeURI(Math.random()));
    ajax.open("POST", "./index.php", true);
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    ajax.send(par);
    Nella pagina PHP invece effettuo il seguente controllo per esser certo che effettivamente c'è stata una richiesta

    codice:
    if(!empty($_REQUEST[XML]) && $_REQUEST[XML]=="get"){
    .....
    }

    Non riesco a capire perchè il programma non riconosce la variabile "XML" e non riesce quindi a svolgere le istruzioni dentro l'if.

    Qualcuno potrebbe darmi una mano?

  2. #2
    Quote Originariamente inviata da mbistato Visualizza il messaggio
    Ciao a tutti,

    ho un piccolo problema a capire il funzionamento della variabile in oggetto. In particolare ho una pagina HTML in cui faccio una richiesta tramite AJAX ad una pagina PHP:

    codice:
    var par = "XML=get&R=" + encodeURI(encodeURI(Math.random()));
    ajax.open("POST", "./index.php", true);
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    ajax.send(par);
    Nella pagina PHP invece effettuo il seguente controllo per esser certo che effettivamente c'è stata una richiesta

    codice:
    if(!empty($_REQUEST[XML]) && $_REQUEST[XML]=="get"){
    .....
    }

    Non riesco a capire perchè il programma non riconosce la variabile "XML" e non riesce quindi a svolgere le istruzioni dentro l'if.

    Qualcuno potrebbe darmi una mano?
    Prima di tutto io scriverei:
    codice:
    if(trim($_POST["XML"])=="get"){
    .....
    }
    Della parte javascript non posso essere sicuro, non ci hai detto con che framework stai lavorando, jQuery, altro?
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    144
    Quote Originariamente inviata da Shores Visualizza il messaggio
    Prima di tutto io scriverei:
    codice:
    if(trim($_POST["XML"])=="get"){
    .....
    }
    anche mettendo questa ottengo il seguente errore: Notice: Undefined index: XML in C:\.....

    Della parte javascript non posso essere sicuro, non ci hai detto con che framework stai lavorando, jQuery, altro?
    uso la seguente funzione js che richiamo quando creo l'oggetto ajax ( var ajax = startXMLHttpRequest())

    codice:
    
    //AJAX-----------------------------
    function startXMLHttpRequest() {
     XHR = null,
     browserUtente = navigator.userAgent.toUpperCase();
    
    
     if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object")
    
    
      XHR = new XMLHttpRequest();
      
     else if(window.ActiveXObject && browserUtente.indexOf("MSIE 4") < 0) {
      if(browserUtente.indexOf("MSIE 5") < 0)
    
    
       XHR = new ActiveXObject("Msxml2.XMLHTTP");
      else
       XHR = new ActiveXObject("Microsoft.XMLHTTP");
     }
     return XHR;
    }

  4. #4
    Ok, così verifichi anche se c'è il parametro:

    codice:
    if(array_key_exists("XML",$_POST) && trim($_POST["XML"])=="get"){
    .....
    }
    Direi che la parte in js va bene... Sei sicuro che la chiamata ajax sta avvenendo correttamente, l'hai controllata con firebug o simili?
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    144
    Quote Originariamente inviata da Shores Visualizza il messaggio
    Ok, così verifichi anche se c'è il parametro:

    Direi che la parte in js va bene... Sei sicuro che la chiamata ajax sta avvenendo correttamente, l'hai controllata con firebug o simili?
    Non mi da altri errori soltanto che sembra ancora non sia in grado di ricevere la richiesta visto che non mi genera il file XML
    Ti posto direttamente il codice cosi puoi verificarlo pure tu:


    pagina HTML:

    codice:
    <html>
    <head>
    <title>GlobaliX GPRS</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
    <SCRIPT src="script/function.js"></SCRIPT>
    <SCRIPT language="JavaScript" type="text/JavaScript">
      var Timer;
      //NOTE: https://developers.google.com/maps/documentation/imageapis/
      //Visualizza mappa da google
      function ShowMAP(latitude, longitude){
        var Width       = 640;
        var Height      = 640;
        var GOOGLE_KEY  = "AIzaSyDkK5hXflglDTRdRjed3cBtDc9t1EZ4ayM";
        if((document.body.clientWidth < 640) && (document.body.clientHeight < 640)){
          Width  =  document.body.clientWidth;
          Height = document.body.clientHeight;
        }
        var IMMAGE = "<img src=http://maps.googleapis.com/maps/api/staticmap?center=" + latitude + "," + longitude + "&zoom=17&size=" + Width + "x" + Height + "&maptype=mobile\&markers=" + latitude + "," + longitude + ",greeng&key=" + GOOGLE_KEY + "&sensor=false>";
        document.getElementById('mainspan').innerHTML =IMMAGE;
        return 0;
      }
      
      //Chiamata XML
      function GetData() { 
        var ajax = startXMLHttpRequest();
        if(ajax) {
          ajax.onreadystatechange=function() {
            if(ajax.readyState==4 && ajax.responseText!=null) {
              //PARSER XML
              try {
                var nodes=ajax.responseXML.getElementsByTagName("ROOT");
    			
                var latitude = nodes[0].getElementsByTagName("LATITUDE")[0].firstChild.nodeValue;
                var longitude = nodes[0].getElementsByTagName("LONGITUDE")[0].firstChild.nodeValue;		
    
    
                ShowMAP(latitude, longitude);
                
                HTML="<table>" +
                "<tr><td>Latitudine:</td><td><b>" + latitude + "</b></td></tr>" +
                "<tr><td>Longitudine:</td><td><b>" + longitude + "</b></td></tr>" +
                "</table>";
                document.getElementById('infospan').innerHTML =HTML;
    
    
              } catch (e) {
                HTML="<br><br><br><p class=error align=center>Struttura XML non valida o nessun dato presente nel database</p>";
                document.getElementById('infospan').innerHTML = HTML;
                document.getElementById('mainspan').innerHTML = "";
              }
            }
          }
    	  try {
            var par = "XML=get&R=" + encodeURI(encodeURI(Math.random()));
            ajax.open("POST", "./index.php", true);
            ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            ajax.send(par);
          } catch (e) {
            document.getElementById('mainspan').innerHTML ="<br><br><br><p class=error align=center><img src=warning.gif><br><br>Errore<br>Pagina " + page + " non trovata sul server</p>";
          }
          Timer = setTimeout('GetData()',20000);
        }
      }
    </SCRIPT>
    </head>
      
    <BODY onLoad='GetData();'>
    <center>
    <b>GlobaliX by Area SX S.r.l.<b><br>
    <div id=mainspan>
    </div>
    <div id=infospan></div>
    </center>
    </BODY>
    </html>


    pagina PHP:

    codice:
    <?php
    include "config.inc.php";
    
    
    $db1 = new SQLite3('globalix.db');
      //Salva le informazioni nel database
      if(true){
      $latitudine= "4153.2095";
      $longitudine = "0228.0818";
      $res = $db1->exec("INSERT INTO globalix (id, latitudine, longitudine) VALUES (null,'$latitudine','$longitudine')");
      }
      if($res)
       echo "1,20,0";
      else
       echo "0,0,0";
      //return(0);
     // }
    //Genera XML
    //if(!empty($_REQUEST['XML']) && $_REQUEST['XML']=="get"){
      if(array_key_exists("XML",$_POST) && trim($_POST["XML"])=="get"){
      header("Content-type: text/xml"); 
      header("Content-disposition: filename=index.xml");
      header("Pragma: no-cache"); 
      header("Expires: 0");
      //The backslash before " mean that I wanna write " in the string
      print "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
    
    
      //Ricavo l'ultima coordinata inserita:
      $query = "SELECT * FROM globalix ORDER BY id DESC LIMIT 1";
      $res = $db1->query($query);
      $rows = array(); 
      while($row = $res->fetchArray()) { 
       $rows[] = $row; 
      }    
      
      echo "<ROOT>";
      if(sizeof($rows) > 0){
     
        //Ricavo la latitudine
        $latitude =(int)substr($latitudine,0,2) + (float)(substr($latitudine,2,7)) / 60; //Latitudine 
        $latitude = substr($latitude,0,9);
    
    
        //Ricavo la longitudine
        $longitude =(int)substr($longitudine,1,2) + (float)(substr($longitudine,3,7)) / 60; //Longitudine
        $longitude = substr($longitude,0,9);
    
    
    
    
        echo "<LATITUDE>" . $latitude . "</LATITUDE>";
        echo "<LONGITUDE>" . $longitude . "</LONGITUDE>";
        echo "</ROOT>";
      } else {
        echo "<ERROR>0</ERROR>";
        echo "</ROOT>";
      }
      echo "finish";
      return 0;
    }
    
    
    ?>

  6. #6
    Ribadisco: hai controllato tramite il pannello Net di firebug che la richiesta ajax venga fatta, e che la richesta ajax sia fatta come deve, ovvero sia una richiesta post e abbia i dati che ti servono al suo interno?

    Se non siamo sicuri di questo aspetto, non sappiamo se il problema è lato client (la richiesat non parte, o parte ma non è ben fatta) o server (la richiesta è ok, ma lo script php non risponde correttamente)...
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Se usciva il notice sull'indice indefinito significa che la richiesta parte.
    Che poi non si generi il file xml mi sembra ovvio, visto che ci hai messo davanti una stringa che non c'entra niente con quei due echo dopo la insert nel db. A che servono? Fra l'altro dovrebbero pure inibire l'invio degli header xml.
    In ogni caso inserirei a scopo di debug un alert di responseText nella funzione onreadystatechange()

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    144
    ok grazie a tutti ho risolto!

  9. #9
    le richieste ajax lavorano su POST e GET...
    Questa volta, più che un voto.. è favoreggiamento.

Tag per questa discussione

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.