Newsgroup: it.comp.lang.javascript
Titolo: Json ajax spedire data da client approccio ....

Ciao.
Volevo un vs parere su l'utilizzo
di json per spedire data dal client
al server.
Con questa funzione preparo
la stringa Json da inviare al server:
codice PHP:
function prepare(){
    var user= new Object();
    var inputTypeText= getInputText();
    for(var i=0;i<inputTypeText.length;i++){
        var prop= inputTypeText[i].getAttribute('name').toString();
        user[prop]=(encodeURIComponent(inputTypeText[i].value));
    }
    user= "user="+user.toJSONString();
    return user;
}
Per poi tramite Ajax inviarla al server.
Secondo voi è il giusto approccio ?
Ogni suggerimento o diverso approccio
sarà come al solito gradito ;)
Bye.

 Secondo voi è il giusto approccio ?
Dunque, noto un errore "grave": Hai esteso l'Object. Cosa che andrebbe
evitata come la peste bubbonica. Fatti piuttosto un oggettino tuo, che
ha il metodo "toJSONString()"; oppure fai una funzione che fa tutto il
lavoro, vedi tu. Ma evita, evita di estendere Object.
Seconda cosa, al server non importa che tu invii anche "user="; questo
ti serve client side, quando devi fare l'eventuale eval; i "dati" devi
trasportarli "puri". Poi, il codice di suo potrebbe essere migliorato,
ha un po' di cose ridondanti, ma intanto ragioniamo sull'approccio. :)
-- 
~ Se i sintomi persistono, insultare il medico.

 ha un po' di cose ridondanti, ma intanto ragioniamo sull'approccio. :)
Questo mi suona un po strano vuoi dire inviare una richiesta post
utilizzando
solamente l'url cioè fare la stessa cosa che fai il + delle volte con
get
per intenderci
http_request.open('GET', 'serversidepage', true);
 http_request.send(null);
potresti essere + preciso ti ringrazio ancora della tua pazienza.
Bye.

 potresti essere + preciso ti ringrazio ancora della tua pazienza.
Intendo dire che al server non devi inviare una stringa tipo:
	user={nome:"Pippo"};
Ma solo:
	{nome:"Pippo"};
-- 
~ Io non soffro di pazzia, ne godo ogni minuto.
(I don't suffer from insanity, I enjoy every minute of it)


I'm at my wits' end :(, really !
Ci faccio un bel pensierino ma dubito di riuscire a venirne
fuori la mia conoscenza di js è ancora purtroppo limitata.
Se ho capito bene è una cosa del genere:
function getJSONString( obj ){
Object.prototype.toJSONString = function ( ){ /* etc... */}
        /*                ma poi faccio una cosa del genere ???
               return obj.toJSONString();
         */
 }
O no (se fosse così non vedo la differenza)?
Allora mettendo i puntini
con Object.prototype.toJSONString estendi
Object assegnado un metodo toJSONString
ma in questo modo estendi sempre Object
Cosa intendi dire per creati il tuo oggetto
scusa ma sto facendo confusione.
Bye.
"Without faith, nothing is possible. With it, nothing is impossible"

 Cosa intendi dire per creati il tuo oggetto
Intendo qualcosa del genere:
	function MyCustomObject(){
		return this;
	}
	MyCustomObject.prototype.sayHello = function(){
		alert("Hello!");
	}
	var myobj = new MyCustomObject();
 
	myobj.sayHello();
-- 
~ L'ingegnere non vive, funziona.

Ti ringrazio approffondisco la gestione degli  oggetti
e ti faccio sapere ;)
Mi permetto di segnalare questo link per Ajax
http://antirez.com/articoli/spaghettiajax.html
supratutto interessante per quanto riguarda la programmazione
funzionale (anche se la  funzione XHR alla fine mi lascia
un po perplesso ).
Bye.

         myobj.sayHello();
Prima di andare in ritiro ..........
Dunque dovrei  fare una cosa del genere se ho capito bene
 function MyCustomObject(){
  var inputTypeText= getInputText();
   for(var i=0;i<inputTypeText.length;i++){
           var prop=
inputTypeText[i].getAttribute('name').toString();
           this[prop]=(encodeURIComponent(inputTypeText[i].value));
    }
                return this;
        }
        MyCustomObject.prototype.toJSONString = function(){
              //json.js codice che sta dentro a
Object.prototype.toJSONString
        }
        var myobj = new MyCustomObject();
        myobj.toJSONString();
Sappimi dire scusami se insisto (senza aver approfondito)
Bye.

 Dunque dovrei  fare una cosa del genere se ho capito bene
No, intendevo un'altra cosa. Riprendendo il tuo codice iniziale:
function prepare(){
    var user= new MyCustomObject();
    var inputTypeText= getInputText();
    for(var i=0;i<inputTypeText.length;i++){
        var prop= inputTypeText[i].getAttribute('name').toString();
        user[prop]=(encodeURIComponent(inputTypeText[i].value));
    }
    return user.toJSONString();
}
Una cosa del genere. Ovviamente per funzionare, il tuo oggetto custom
deve avere il metodo "toJSONString()", che devi spostare dall'Object.
In questo modo non estendi più l'oggetto nativo Object, ma ne hai uno
tuo che implementa il metodo in questione.
-- 
~ Una volta, qui, era tutto <TABLE>.


Yeah ! I can see the light ;)
La tua lezione è stata molto utile per chiarirmi le idee
sulla gestione degli oggetti in js.
Adesso un altra impresa mi si presenta
mettere le mani a json.js per estrapolare
object.toJSONString() in modo da poterlo
utilizzare nel mio oggetto personalizzato ;)
la vedo dura (anche perchè ad una prima occhiata
c'è di mezzo pure string.toJSONString() ) ci provo
con calma e ti faccio sapere.
Baciamo le mani dottò !
Bye.

by andr3a
http://forum.html.it/forum/showthread.php?s=&postid=10454346#post10454346
toJSONString = (function(toJSONString){return function(o){return
toJSONString.call(o)}})({}.toJSONString);
delete Object.prototype.toJSONString;
var result= [{"id":"1","date":"1175625117","content":"pippolo"}];
for(var i=0;i<result.length;i++){
    alert(toJSONString(result[i]));
}
'Cercando cercando qc si trova ; ) '
Bye.

 delete Object.prototype.toJSONString;
Ma scusa, perché devi fare quest'obrorio? Sarebbe preferibile che tu
non usassi la libreria che estende l'Object, come ti ho già scritto,
spostando il metodo in un oggetto custom - oppure - in una funzione.
Un codice del genere potrebbe andare bene laddove tu non hai accesso
ai sorgenti della pagina. Ma non è il tuo caso.
E guarda, che per fare le cose bene, si tratta unicamente di fare un
banale replace e copia&incolla, eh. :)
Ad esempio, se scrivi un tuo oggetto custom, al posto di:
	Object.prototype.toJSONString = function(o){
		/* questo codice qua... */
	}
Avresti qualcosa tipo:
	function Serializable(){return this;}
	Serializable.prototype.toString = function(o){
		/* ... lo metti qua */
	}
E invece di fare:
	var user= new Object();
	var inputTypeText= getInputText();
	for(var i=0;i<inputTypeText.length;i++){
        	var prop= inputTypeText[i].getAttribute('name').toString();
	        user[prop]=(encodeURIComponent(inputTypeText[i].value));
	}
	return user.toJSONString();
 
Faresti:
	var user = new Serializable();
	var inputTypeText= getInputText();
	for(var i=0;i<inputTypeText.length;i++){
        	var prop= inputTypeText[i].getAttribute('name').toString();
	        user[prop]=(encodeURIComponent(inputTypeText[i].value));
	}
	return user.toString();
E con questo approccio sarebbe implicitamente serializzato laddove è
richiesta una stringa, ad esempio:
	alert(user) // restituisce l'oggetto in object notation
E' decisamente più conforme alla OOP, e più pulito. E se ti andasse,
potresti aggiungere un metodo del tipo "parseFromString()" chiudendo
il cerchio.
In questo modo *rimuovi* *definitivamente* dal prototype dell'Object
qualsiasi schifezza, ti tieni un oggetto separato per gestire questo
tipo di operazioni, il tutto *senza* ripercussioni su altri oggetti.
Ed ti sarà quindi più facile manutenerlo in futuro.
