Xajax

Buongiorno!

Questo non è proprio legato a php, però una mano da Gianni che conosce bene questo framework non sarebbe male! :D

In merito a questa discussione (gestionale, ecc.) http://www.phpnews.it/forum/index.php?topic=1631 alla fine ho deciso di usare xajax solo per interagire tra form e db (inserimenti, modifiche, ricerche) e nonostante non lo conosco bene i risultati sono ottimi.

Il problema ora è proprio relativo a xajax, o meglio, a come eseguire una certa operazione; faccio un esempio così è più chiaro:

ho 2 tabelle nel db, una contiene il prodotto (codice, descrizione, ecc.) e la seconda contiene i componenti che formano il prodotto (in realtà contiene il codice del prodotto finito, il codice del singolo pezzo e la quantità necessaria -> codice_prodotto1,codice_vite, 30).

Nel form di modifica compaiono i dati del prodotto finito ed in una select multipla l'elenco di tutti i singoli pezzi che lo compongono, da questa select posso essere cancellati e qui entra in gioco xajax.

Il bottone per cancellarli richiama una funzione che:

riceve il codice del pezzo, lo cancella dalla seconda tabella (fin qui ovviamente nessun problema) e poi dovrebbe eliminarlo dalla select; per fare questo con xajax ho usato addreplace e gli faccio sostituire la stringa <option value=.........</option> con "" ma nella select rimane una riga vuota dove prima c'era la descrizione.

Es:

codice_vite1

codice_ghiera

codice_trasformatore

se cancello codice_ghiera diventa:

codice_vite1

codice_trasformatore

anziché:

codice_vite1

codice_trasformatore

Oddio come sono stato prolisso, spero che sia chiaro almeno!

inviato 9 anni fa
LonelyWolf
X 0 X

Quarda qui, vedi se ti può essere utile:

http://www.quirksmode.org/js/options.html

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ecco la soluzione, grazie Gianni!

Stasera (notte in realtà) mi metto subito all'opera, anziché fare un replace con xajax mi basterà aggiungere questo:

document.forms['testform'].testselect.options = null; Purtroppo io e js siamo come il giorno e la notte!

risposto 9 anni fa
LonelyWolf
X 0 X

io ho usato xajax per una sessantina di ore, dopodiche ho preferito imparare ad usare ajax puro, mi sento meglio :)

e mi trovo molto meglio, e non credevo di avere queste capacità con JS ???  :2funny:

:bye:

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

Se avessi il tempo....

Dunque la soluzione sarebbe questa:

document.nome_form.nome_select.options[document.nome_form.nome_select..selectedIndex]=null;

Se lo metto in un evento onclick tutto ok, ma quando viene restituito da xajax è come se non esistesse; ho provato con addScript che dovrebbe eseguirlo immediatamente (ma non esegue neanche un alert! ) e nemmeno usando addScriptCall funziona.

risposto 9 anni fa
LonelyWolf
X 0 X

se usi firefox ti consiglio vivamente di utilizzare la console degli errori :

strumenti } console degli errori

mostra tutti gli errori nello script della pagina :D

è davvero molto utile

:bye:

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

Lo so ma errori non me ne segnala! (su phpnews qualke warning c'è! :D )

Aggiungere le options si aggiungono, svuotarla completamente prima di mettere i nuovi elementi si svuota ma eliminare la singola no!

Mi sembra assurdo.

risposto 9 anni fa
LonelyWolf
X 0 X
(su phpnews qualke warning c'è! :D )

Magari se mi mandate un PM cerco di risolvere...

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Nessuna idea su come risolvere il mio problema?

Aggiungere si aggiungono, svuotarla (con un ciclo) si svuota, ma eliminare una singola opzione non va!

risposto 9 anni fa
LonelyWolf
X 0 X

Cercando la soluzione a questo problema (continuo a postare così se qualcuno dovesse avere lo stesso problema potrà trovare un aiuto) ho "scopeto" che per javascript il valore del parametro null deve essere null e non la stringa 'null' mentre xajax passandolo come parametro lo mette tra apici e quindi stringa.

Potrebbe essere questo fatto ad impedire la corretta esecuzione dello script, ciò che mi fa usare il condizionale è che lo script per svuotare la select (che funziona correttamente) utilizza lo stesso metodo:

Singola options:

var miaselect = document.getelementbyid('elenco_mt');
miaselect.options[miaselect.options.selectedindex]=null;

X svuotare la select:

var miaselect = document.getelementbyid('elenco_mt');
for (indice=0;indice<miaselect..options.length;indice++){miaselect.options[0]=null;}

Potrebbe essere che nel secondo caso (svuotamento), null essendo incluso in un ciclo non venga convertito?

Se riesco in pausa pranzo faccio un test impostando un ciclo fittizio o inserendolo in una funzione js.

risposto 9 anni fa
LonelyWolf
X 0 X

Ecco un esempio per fare ciò che desideri:

<?php
require_once ("xajax_core/xajax.inc.php");

$xajax = new xajax("xajax1.php");
$xajax->registerFunction("myFunction");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<?php $xajax->printJavascript(); ?>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
  <p>
    <input name="numero" type="text" id="numero" />
</p>
  <p>
    <select name="elenco" id="elenco">
      <option value="0" selected="selected">uno</option>
      <option value="1">due</option>
      <option value="2">tre</option>
    </select>
</p>
  <p>
    <input type="button" name="Button" value="Button" onclick="xajax_myFunction(document.getElementById('numero').value);"/>
  </p>
</form>
</body>
</html>
<?php
require_once("./xajax_core/xajax.inc.php");

$xajax = new xajax();

$xajax->registerFunction("myFunction");

function myFunction($index)
{
    $objResponse = new xajaxResponse();
    
    $index--;
    
    $objResponse->script("var miaselect = document.getElementById('elenco'); miaselect.options[$index]=null;");
    
    return $objResponse;
}

$xajax->processRequest();
?>

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Si Gianni, il principio è quello ma è questo che non funziona:

    $objResponse->script("var miaselect = document.getElementById('elenco'); miaselect.options[$index]=null;");

Avevo provato anche a mettere direttamente l'indice numerico (anche se non corrispondeva, era solo un test) ma niente da fare.

il punto è che non posso far inserire all'utente il numero dell'opzione da eliminare se i componenti sono pochi potrei anche ma dato che la maggior parte sono oltre 30 non è bello far contare l'utente (e se poi sbaglia?), deve funzionare proprio selezionando l'opzione e cliccando sul bottone "-" per rimuoverlo dal db e dalla select; come detto dal db lo rimuove ma dalla select no (se ricarico la select dopo l'eliminazione ovviamente non c'è più).

Cmq ho visto in rete anche uno script js che utilizza select.options.remove(index), se il problema è proprio la conversione del parametro null così dovrei risolvere.

Dopo i test vi farò sapere.

Edit:

Per dovere di cronaca, questo script :

var miaselect = document.getelementbyid('elenco_mt');
miaselect.options[miaselect.options.selectedindex]=null;

messo nell'onclick di un link funziona perfettamente!

risposto 9 anni fa
LonelyWolf
modificato 9 anni fa
X 0 X

Il problema non è dovuto allo script in se, ma a qualche cosa di xajax, qualsiasi script non funziona.

Mi tocca indagare in posti sconosciuti, magari un upgrade alla .5 (anche se è una beta) funziona.

risposto 9 anni fa
LonelyWolf
X 0 X

Ragazzi non ditemi che sono stupido, anche se me lo merito!

Dopo tutto il tempo passato su quel pezzo di codice non mi ero ancora accorto che:

if (!errore) {
//codice che invia lo script js
}

ma php non avrebbe dovuto segnalarmi l'errore? almeno di parsing?

Vabbè quando torno a casa lo sistemo.

P.S.

Lo vedete l'errore? :D

risposto 9 anni fa
LonelyWolf
X 0 X

Ti sei mangiato un $?

P.S.: ma il JS è case sensitive?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Esatto!  O0

Non lo so se è case sensitive ma penso proprio di no perchè anche nelle proprietà/metodi/attributi funziona indistintamente, a.e. selectedIndex e selectedindex.

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