var obj_SomeNestedData = eval('(' + unescape(transport.responseText) + ')');
Sorry!!! Silly typo.
On 05/03/07, Richard Quadling <[EMAIL PROTECTED]> wrote:
> Try something like this.
>
> <?php
> $a_SomeNestedData = array
> (
> // Some manual data.
> 'Key1' => 'Data1',
> 'Key2' => array
> (
> 'Key2.1' => 'Data2',
> 'Key2.2' => 'Data3',
> ),
> // Some external data.
> 'POST' => array_key_exists('_POST',$GLOBALS) ? $_POST : NULL,
> 'GET' => array_key_exists('_GET',$GLOBALS) ? $_GET : NULL,
> 'COOKIE' => array_key_exists('_COOKIE',$GLOBALS) ? $_COOKIE : NULL,
> );
>
> $s_Response = rawurlencode(json_encode($a_SomeNestedData));
> echo $s_Response;
> ?>
>
> On the CLI for me, this produces ...
>
> %7B%22Key1%22%3A%22Data1%22%2C%22Key2%22%3A%7B%22Key2.1%22%3A%22Data2%22%2C%22Key2.2%22%3A%22Data3%22%7D%2C%22POST%22%3A%5B%5D%2C%22GET%22%3A%5B%5D%2C%22COOKIE%22%3A%5B%5D%7D
>
> Now, assuming this was the response to an AJAX request, you would then use ...
>
> var obj_SomeNestedData = unescape(transport.responseText)
>
> in your onSuccess handler to get the data back again.
>
>
> xpmstos wrote:
> > I use a generic PHP server which uses the PECL ext/json.
> > My server use this to get the data:
> > $data = json_decode(file_get_contents('php://input'));
> >
> > The client-code is simpel, i don't select any encoding-formats etc.:
> > new Ajax.Request('server.php',
> > {
> > method: 'post',
> > parameters: JSON.stringify({
> > method: 'foo::bar',
> > params: [data],
> > id: new Date().getTime()
> > }), ...
> Hello XP,
>
> I'm not a network guy, but I imagine you may find that some users
> (i.e. those using proxy servers, or those using certain browsers) may
> encounter problems when attempting to post non-url encoded characters.
> In fact, it may not work for anybody. Traditionally, setting up a
> scheme like this in php would simply request php to build the data
> from the posted string:
>
> <php>
> $data = $_POST;
>
> // where data then looks like the following, based on an ajax-posted
> object run through Hash.toQueryString()
> $data = array(
> 'method'=>'foo::bar',
> 'params'=>array('some data',array('some nested'=>'data')),
> 'id'=>'1123123123'
> );
> </php>
>
>
> If you WOULD like to try sending JSON, you could override the original
> prototype Hash.toQueryString method by defining it after inclusion of
> prototype something like so:
>
> Object.extend(Hash, {
> toQueryString: function(obj) {
> JSON.stringify(obj);
> }
> });
>
> then, in the parameters, send a simple object like so:
>
> new Ajax.Request('server.php',
> {
> method: 'post',
> parameters: {
> method: 'foo::bar',
> params: data,
> id: new Date().getTime()
> }), ...
>
>
> If you do try it, let us know what you find.
>
>
> Regards,
>
> Ken Snyder
> - Show quoted text -
>
> >
>
>
>
> On 04/03/07, xpmstos <[EMAIL PROTECTED]> wrote:
> >
> > Hello Christophe, Hello Ken,
> >
> > i use atm FF2.0, but i want a compatibility for I.E.also etc.
> > When i use your simple object:
> > > new Ajax.Request('server.php',
> > > {
> > > method: 'post',
> > > parameters: {
> > > method: 'foo::bar',
> > > params: data,
> > > id: new Date().getTime()
> > > }), ...
> > the first chars in my string would be correct, but not the followings,
> > the result look like this:
> > {"method%22%3A%22foo%3A%3Abar%22%2C%22params%22%3A%
> >
> > I worked with another solution now. I use my javascript code like
> > before:
> > new Ajax.Request('server.php',
> > {
> > method: 'post',
> > parameters: JSON.stringify({
> > method: 'foo::bar',
> > params: [data],
> > id: new Date().getTime()
> > }),
> > onSuccess:doSomething,
> > onFailure: function(){ alert('Something went wrong...') }
> > });
> >
> > But new is my little solution on the server side, i will tell, it's
> > simple but it will works:
> > function hex2str($hex) {
> > $str = ''; $loop = 1;
> > for($i=0; $i<strlen($hex); $i+=$loop) {
> > $chr = substr($hex,$i,1);
> > if($chr=='%') { // found next hex
> > $chr = substr($hex,$i+1,2);
> > $str .= chr(hexdec($chr));
> > $loop = 3;
> > }
> > else { // next char
> > $str .= $chr;
> > $loop = 1;
> > }
> > }
> > return substr($str,0,strlen($str)-1); // kill the last "=", little
> > bug
> > }
> >
> > And now, i receive the string, decode it firstly with hex2str, before
> > it decode as a JSON objekt:
> > $string = hex2str(file_get_contents('php://input'));
> > $objJSON=json_decode($string);
> >
> > What would you think, is it a terrible solution? Or is it acceptable?
> > Thanks for you help Christophe and Ken
> >
> >
> > --~--~---------~--~----~------------~-------~--~----~
> > You received this message because you are subscribed to the Google Groups
> > "Ruby on Rails: Spinoffs" group.
> > To post to this group, send email to [email protected]
> > To unsubscribe from this group, send email to [EMAIL PROTECTED]
> > For more options, visit this group at
> > http://groups.google.com/group/rubyonrails-spinoffs?hl=en
> > -~----------~----~----~----~------~----~------~--~---
> >
> >
>
>
> --
> -----
> Richard Quadling
> Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
> "Standing on the shoulders of some very clever giants!"
>
--
-----
Richard Quadling
Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
"Standing on the shoulders of some very clever giants!"
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Spinoffs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-spinoffs?hl=en
-~----------~----~----~----~------~----~------~--~---