ajax: xml response

 :) sto imparando ad usare ajax da solo xajax mi aveva stufato  ^-^ ( cmq continuerò a stidiarla ;) non ti preoccupare per quella cosa )

in pratica ora dovrei mettere su alcune funzioni, la più importante è quella per la validazione dei form,

in pratica vorrei sapere se questo metodo ( che ho ponderato ) è corretto:

pagina.php esegue la richiesta a ciao.php che controlla i campi con dati nel db e restituisce un documento XML con i messaggi di errore se ci sono del tipo

<root>

<error name="username">username invalido</error>

<error name="passwprd">password non valida</error>

</root>

che poi utlizzerò con ajax per mostrarli dove devo.

nel caso JS sia disabilitato il form verrà inviato ugualmente al punto successivo, solo che non so come potrei fare ad analizzarlo se JS è disabilitato ( cioè se lo analizzo con ajax prima, sarebbe inutile rianalizzare tutto dopo, quindi vorrei analizzarlo solo se JS è off)

il form verrà controllato in modo che non ci siano problemi con la registrazione o il login anche se JS è disabilitato.

qualcuno mi dice se il mio ragionamento è corretto prima di perdere 5-6 ore per nulla'  :2funny:

e come controllo il form con php solo se js è off?

 :bye:

inviato 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Il controllo del Javascript andrebbe fatto all'inizio della navigazione dell'utente ed il risultato potrebbe essere salvato in sessione. Poi dovrai inviare le pagine corrette all'utente, a seconda della presenza o meno del javascript. QUindi dovrai prevedere 2 versioni distinte degli script, una per gli utenti con JS, l'altra per quelli senza.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

sisi ma il mio dubbio era su se e come controllare solo se JS non aveva fatto fare il controllo prima :D

quindi JS chiama check.php e setta messaggi e una var di sessione

se quando invio , la var non è settata(quindi nessuna JS è stata inviata)rieseguo il controllo con php altrimenti uso ajax per controllare inviare i dati e controllarli con php.

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

non mi è chiara una cosa :

istanzio XMLHttpRequest in questo modo :

function startXMLHttpRequest() {
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
       try {
         request = new XMLHttpRequest();
        } catch(e) {
         request = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
          try {
           request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch(e) {
           try {
                request = new ActiveXObject("Microsoft.XMLHTTP");
           } catch(e) {
                request = false;
           }
      }
    }
   return request;
}

una e ritorno request per poi utilizzarlo nelle mie funzioni, il codice originale è questo

var req;

function loadXMLDoc(url) {
   req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
       try {
         req = new XMLHttpRequest();
        } catch(e) {
         req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
          try {
           req = new ActiveXObject("Msxml2.XMLHTTP");
         } catch(e) {
           try {
                req = new ActiveXObject("Microsoft.XMLHTTP");
           } catch(e) {
                req = false;
           }
      }
    }
   if(req) {
      req.onreadystatechange = processReqChange;
      req.open("GET", url, true);
      req.send("");
   }
}

in pratica qui passano l'url alla funzione che avvia XMLhttprequest ma io invece non voglio, anzi vorrei fare così:

una funzione per avviare xmlhttprequest e poi eseguire il necessario per inviare la richiesta e poi stampare il risultato ottenuto ... ma non so proprio come fare :| ???

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

risolto,scusate :)

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

altro problemino:

con una richiesta effettuata onLoad setto $_SESSION['ajaxEnabled'] quindi capisco se il browser supporta ajax, e posso utilizzare o php o ajax+php senza problemi.

il problema nasce quando devo includere le pagine:

se ajax è abilitato

devo chiamare setPage() ( funziona javascript )

se no devo chiamare setPate ( funzione php )

come devo fare a chiamare javascritp da "dentro php" ?

vale a dire

if($sm->ajaxEnabled()){
    //chiama funzione JS
}else{
    $sm->setPage();
}

 ???

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

non credo si possa fare, almeno per come l'hai descritto. :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ho capito come fare... ma sto facendo un casotto :)

non so come gestire la pagina tramite JS

cioè utilizzo la stessa funzione per estrarre i dati dal database

solo che se la chiamo dal file ajax.process.php i dati vengono inseriti in un albero XML in modo da poter essere poi parsati da JS ed aggiornare la pagina.

solo che non sono convinto sia il metodo migliore ???

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

questo è il codice

    //<![CDATA[

function startXMLHttpRequest() {
   var request   = false;
   //non IE base browser supports XMLHttpRequest
   if(window.XMLHttpRequest && !(window.ActiveXObject)){
      try{
         //istance the object
         request = new XMLHttpRequest();
         //alert('started XmlHttpRequest');
         } catch(e) {
         //request unsuccessfull
            request = false;
         }
   }else if(window.ActiveXObject){
      try{
         //istance ActiveX object
         request = new ActiveXObject("Msxml2.XMLHTTP");
         //alert('started ActiveXObject');
      } catch(e) {
         try{
            //try to istance another activeX object
            request = new ActiveXObject("Microsoft.XMLHTTP");
            //alert('started ActiveXObject');
         } catch(e) {
            request = false;
         }
      }
   }
   if(request){
      return request;
   }else{
      alert('Unable to start XmlHttpRequest');
   }
}

function setPage(id){

    obj = startXMLHttpRequest();
  
   obj.onreadystatechange = 
   function(){
   
      loading();
      
         if(obj.readyState == 4){
         //alert(obj.responseText);
            if(!obj.status == 200){
               alert('Error during request');
            }
         }
   }
   obj.open("GET", '/ajax.request.php?do=load&id='+id, true);
   obj.send("");
   
}

function ajaxStatus(){

    obj = startXMLHttpRequest();
  
   obj.onreadystatechange = 
   function(){
         if(obj.readyState == 4){
         //alert(obj.responseText);
            if(!obj.status == 200){
               alert('Error during request');
            }
         }
   }
   obj.open("GET", '/ajax.request.php?do=ajax', true);
   obj.send("");
   
}

function loading(){
   
   element = document.getElementById('loadingMessage');
   
      if (obj.readyState == 1) {
      //show loading message
            element.style.display = 'block';
            element.innerHTML = '<img src="/layout/images/load.gif" alt="" />Loading contents...';
                     }
      if(obj.readyState == 2){
      //hide loading message
            element.style.display = 'none';            
      }
}
   


//]]>

la pagina che esegue le richieste è questa

<?php
include_once('config/class/smframe.class.php');
$sm = new solemareFrameWork();

@ $request = $_GET['do'];

header('content-type: text/xml');
echo '<?xml version="1.0" ?>'."\n".
    '<root>'."\n";

   switch($request){   
      
      case 'ajax':
            $_SESSION['usesAjax'] = 1;
            echo '   <ajax>enabled</ajax>'."\n";
         break;   
      
      case 'load':
         //@ $id = (int) $_GET['id'];
            /*$res = $sm->requestPageContent($id);
               echo '<title>'.htmlspecialchars($res[0]['title']).'</title>';
               echo '<author>'.htmlspecialchars($res[0]['username']).'</author>';
               echo '<label>'.htmlspecialchars($res[0]['label']).'</label>';
               echo '<content>'.htmlspecialchars($res[0]['content']).'</content>';
               echo '<date>'.htmlspecialchars($res[0]['date']).'</date>';*/
               echo '   <aaaaax>enabled</aaaaax>'."\n";
            
   
         break;
            
   }
   
echo '</root>';

?>

la parte load è un putiferio lo so ma sono tutti i test che sto facendo per vedere se riesco a catturare il risultato , finora in vano visto che ricevo un errore JS.

vorrei fare questo:

se  ajax può essere usato ai link : onClick="setPage($id)"

se no link html e carica via PHP i dati dal DB popolando un template.

per scegliere se usare php o ajax ormai non ci sono problemi :D spero,utilizzo questo metodo :

in primis metto questo :

if(!isset($_SESSION['usesAjax'])){

   $_SESSION['usesAjax'] = 2;

}

poi

<body onLoad="ajaxStatus()">

se ajax è attivo la richiesta viene inoltrata alla pagina che esegue le richieste e setta la variabile di sessione a 1 ( ajax attivo ) putroppo non sono riuscito a trovare un modo perchè sia possibili attivarlo / disabilitarlo nella stessa sessione , ma non credo sia un problema.

la cosa che mi sta consumando è includere il contenuto della pagina, parsarlo e metterlo al suo posto nella index, il sito utilizza solo una pagina che a sua volta può includere :

o il file per scaricare i dati dal database con php puro

o la richiesta per aggiornare la pagina con i dati ricavati da ajax.

altre pagine speciali, con contenuti e comportamenti diversi.

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

risolto: non carico nessuna pagina con javascript

pro: sicuro,pratico,posso usare url rewriting

contro : leggermente piu lento ( siamo sicuri :2funny: ?? )

ma uso ajax solo per effettini con i form ed altro :D

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda

Domande simili