Back to top

Autore Topic: [Risolto] Problemi tra AJAX e stringhe responseText  (Letto 3289 volte)

Offline Alhazred

  • Appassionato
  • ***
  • Post: 289
    • Mostra profilo
[Risolto] Problemi tra AJAX e stringhe responseText
« il: 16 Set 2011, 22:54:43 »
Per favore datemi una mano perché sto uscendo  matto.

Nel file default.php di una vista del frontend di un componente ho questo codice AJAX
Codice: [Seleziona]
function cartaInternoChanged()
{   
    var mypostrequest = new assegnaXMLHttpRequest();
    mypostrequest.onreadystatechange = function() {
        if (mypostrequest.readyState == 4){
            if (mypostrequest.status == 200 || window.location.href.indexOf("http") == -1){
                var select = mypostrequest.responseText;
           
                select = select.match(/<select(.*?)<\/select>/m);
                alert(select); //stampa null
                document.getElementById("select-formatocarta").innerHTML = select;
            }
            else{ alert("An error has occured making the request"); }
        }
    }
    var parametri = "option=com_preventivilibri&task=formaticarta&tmpl=component&";
    parametri += "tipocarta="+document.forms["preventivo"].elements['tipocarta'].value;
     
    mypostrequest.open("POST", "index.php", true);
    mypostrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    mypostrequest.send(parametri);
    return false;
}
La funzione formaticarta() che viene chiamata si trova nel controller ed ha questo codice
Codice: [Seleziona]
function formaticarta()
{
    $db = &JFactory::getDBO();
       
    $query = "SELECT id, formato, h, l FROM #__gestionepreventivi_formaticarta";
    $db->setQuery($query);
    $result = $db->loadAssocList();

    $options = array();
    foreach($result as $option)
        $options[] = JHTML::_('select.option',$option['id'],JText::_($option['formato']." (".$option['h']." x ".$option['l'].")"));
       
    echo JHTML::_('select.genericlist', $options, 'formatocarta');
}
Perché
select = select.match(/<select(.*?)<\/select>/m);
non trova alcun match?

Se provo a stampare direttamente la variabile "select" il menu appare, quindi la risposta della funzione php è corretta, ma la match() non se ne accorge.

Se al posto di
var select = mypostrequest.responseText;
metto
select = "bla bla <select name='formatocarta'><option value='1'>A4</option><option value='2'>A5</option></select> bla bla";

il match() fa il suo lavoro, rimuove tutto ciò che non è il tag select, quindi la regex  funziona

Il problema sta nel fatto che il responseText non è interpretato come stringa... come mai? ???

Il punto è che oltre al tag select arriva altro codice aggiunto da Joolma che non mi serve e voglio rimuoverlo selezionando solo il tag select.

Aiutatemi, non so più che pesci prendere.
« Ultima modifica: 20 Set 2011, 12:52:19 da Alhazred »

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Problemi tra AJAX e stringhe responseText
« Risposta #1 il: 18 Set 2011, 08:14:08 »
un poco difficile da capire dato che resta il mistero relativamente a che sia assegnaXMLHttpRequest...
la prima domanda é: responseText é una propietà o hai dimenticato le () di un metodo? probabilmente se fosse un metodo avrebbe stampato undefined e non null, ma verifica; prova ad usare typeof per individuare che è restituito.

a me pare che 'select.xxx' restituisca solo la select, senza alcun altro codice, ad ogni buon conto potresti fare  la pulizia nel php.

ps: il metodo corretto, secondo me, è farsi restituire l'array delle opzione e popolare la select tramite js.

ciao,
marco

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline Alhazred

  • Appassionato
  • ***
  • Post: 289
    • Mostra profilo
Re:Problemi tra AJAX e stringhe responseText
« Risposta #2 il: 20 Set 2011, 12:51:54 »
Ho risolto e spiego la situazione nel caso possa fare comodo ad altri.

Intanto assegnaXMLHttpRequest() ovviamente è una funzione che mi restituisce un oggetto XMLHttpRequest da usare per la chiamata AJAX e responseText è ciò che torna indietro dalla chiamata.

Dunque, il problema era che la stringa generata dallo script PHP viene messa all'interno della struttura di una pagina del sito, anche se questa non viene mostrata, dunque in risposta, oltre al menu select c'era tutto il codice della pagina: doctype, tag heder, meta, link, body... tutto.

Ho risolto mettendo all'inizio e alla fine della stringa generata dallo script un simbolo che mi fa da delimitatore, nel codice javascript effettuo uno split() e recupero il secondo elemento, che è il solo codice che mi interessa.

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:[Risolto] Problemi tra AJAX e stringhe responseText
« Risposta #3 il: 20 Set 2011, 14:40:18 »
se ti serve solo l'output della tua singola funzione, devi creare una view ad hoc per il formato restituito (es: view.ajax.php), poi richiamare la view specificando il formato desiderato (&format=ajax).

ovviamente, in questo caso, non è necessario creare un template.

ciao,
marco

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline Alhazred

  • Appassionato
  • ***
  • Post: 289
    • Mostra profilo
Re:[Risolto] Problemi tra AJAX e stringhe responseText
« Risposta #4 il: 20 Set 2011, 15:04:15 »
Grazie, ci proverò.  :)

 



Web Design Bolzano Kreatif