note 17955 added to function.wddx-serialize-value

From: Date: Fri, 04 Jan 2002 21:36:48 +0000
Subject: note 17955 added to function.wddx-serialize-value
Groups: php.notes 
Request: Send a blank email to php-notes+get-24406@lists.php.net to get a copy of this message
When serializing JavaScript objects to interact with PHP objects, you should make the JavaScript object's first entry a php_class_name. PHP: class myclass { var $name; var $age; var $ssn; ... function myclass() { $this->name = ""; $this->age = ""; $this->ssn = ""; ... } } JavaScript: // serialization example code is from the // WDDX SDK http://www.openwddx.org function SerializeMsg(name, age, ssn, ...) { var MyObj = new Object; // the following line is necessary in order // to deserialize back to a PHP object MyObj.php_class_name = "myclass"; MyObj.name = name; MyObj.age = age; MyObj.ssn = ssn; ... // Create a new serializer "object" to do our work for us MySer = new WddxSerializer; // Serialize the Message variable into a WDDX Packet MyWDDXPacket = MySer.serialize(MyObj); // Output WDDX Packet so we can see what it looks like return MyWDDXPacket; } Now you can use this in a page which is its own form action: <?php // don't forget to include the class definition from above! if (!isSet($wddx_packet)) $MyObj = new myclass(); else $MyObj = wddx_deserialize($wddx_packet); ?> <html> <head> <script language="JavaScript"> <!-- function Init() { // sets the form's text-elements tmp = document.MyForm; tmp.name.value = "<? echo $MyObj->name ?>"; tmp.age.value = "<? echo $MyObj->age ?>"; tmp.ssn.value = "<? echo $MyObj->ssn ?>"; ... } function SerializeMsg(name, age, ssn, ...) { // see above! } function SubmitForm() { // sumbits the form tmp = document.MyForm; tmp.wddx_packet.value = SerializeMsg(tmp.name.value, tmp.age.value, tmp.ssn.value,...); document.submit(); } // --> </script> </head> <body> ... <form name="MyForm" action="<? echo $PHP_SELF ?>" method="post"> <input name="wddx_packet" type="hidden"> <input name="name" type="text"> <input name="age" type="text"> <input name="ssn" type="text"> ... <input name="SubmitBtn" type="button" onclick="SumbitForm()"> </form> </body> </html> --------------------------------- If you don't provide that first 'php_class_name' in the JavaScript function, then when PHP deserializes it will deserialize into an associative array and not an object instance. Note that this provides a way to maintain state without using sessions or cookies - just good old HTML! Hope this helps! -- Chris Hansen -- http://www.php.net/manual/en/function.wddx-serialize-value.php http://master.php.net/manage/user-notes.php?action=edit+17955 http://master.php.net/manage/user-notes.php?action=delete+17955 http://master.php.net/manage/user-notes.php?action=reject+17955

« previous php.notes (#24406) next »