Hi,

I replaced escape with encodeURI. But decoding fails again.

   function sendMessage(baseUrl, idNickRcv, msg) {

      var requestObject       = new Object();
      requestObject.idNickRcv = idNickRcv;
      requestObject.msg       = msg;

      var jsonRequest         = JSON.stringify(requestObject);

      if ((idNickRcv) && (msg)) {

         new Ajax.Request(baseUrl + '/usermsg/index/sendmessage', {
            method:     'POST',
            requestHeaders:{ Accept:'application/json' },
            parameters: encodeURI(jsonRequest),

                         onSuccess:
                          function(transport, json) {
                          //use and handle foo response data
                         }
                         ,
                         on500:
                          function(transport) {
                          //handle error, inform user
                          },
                         onComplete: parseSendMessage

               });


      }

php:

      $request       = rawurldecode($this->getRequest()-
>getRawBody());

// HERE DECODING FAILS AND EXECUTION IS INTERRUPTED.
      $requestObject = $zendJson->decode($request,
Zend_Json::TYPE_OBJECT);
      $msg           = $requestObject->msg;
      $idNickRcv     = $requestObject->idNickRcv;

On 8 Nov, 23:11, Walter Lee Davis <wa...@wdstudio.com> wrote:
> Right. The best low-level way to translate JS to PHP and back again is  
> using encodeURI or uncodeURIComponent on your JS side, and  
> rawurldecode() or rawurlencode() on the PHP side. They are  
> functionally identical, as long as you have set your PHP side to use  
> UTF-8 as its default charset.
>
> Walter
>
> On Nov 8, 2010, at 4:42 PM, T.J. Crowder wrote:
>
>
>
>
>
>
>
> > Hi,
>
> > I don't know that it's the problem because I'm not a PHP person, but
> > you're using the `escape` function to encode your parameters, and then
> > decoding them with a PHP function called `urldecode`. JavaScript's
> > `escape` function does _not_ URL-encode things, it does something
> > similar but different and is almost certainly not what you want. I'm
> > surprised it's working with other browsers, frankly, but perhaps
> > that's my lack of PHP knowledge.
>
> > The most reliable way to send parameters that I know is to send them
> > URL-encoded, and to decode them as URL-encoded data. In Prototype, the
> > easiest way to do that is to supply a plain object to the Ajax.Request
> > method (which Prototype will correctly encode for you):
>
> >    var jsonRequest = ...;
> >    new Ajax.Request( // ...
> >        parameters: {json: jsonRequest}
> >        // ...
> >    });
>
> > ...and then retrieve the value just as you would any other value:
>
> >    $request = $_POST["json"];
> >    $requestObject = Zend_Json::decode($request); // Or your
> > $zendJson, whatever that is
>
> > But again, I'm not a PHP guy and could easily be missing something
> > important here.
>
> > FWIW,
> > --
> > T.J. Crowder
> > Independent Software Engineer
> > tj / crowder software / com
> > www / crowder software / com
>
> > On Nov 8, 5:47 pm, fashionpeople <fashionpeople.busin...@gmail.com>
> > wrote:
> >> Hi,
>
> >> this is my ajax request that works perfectly on IE and FIREFOX, but
> >> not in CHROME!
>
> >>    function sendMessage(baseUrl, idNickRcv, msg) {
>
> >>       var requestObject       = new Object();
> >>       requestObject.idNickRcv = idNickRcv;
> >>       requestObject.msg       = msg;
>
> >>       var jsonRequest         = JSON.stringify(requestObject);
>
> >>       if ((idNickRcv) && (msg)) {
>
> >>          new Ajax.Request(baseUrl + '/usermsg/index/sendmessage', {
> >>             method:     'POST',
> >>             requestHeaders:{ Accept:'application/json' },
> >>             parameters: escape(jsonRequest),
>
> >>                          onSuccess:
> >>                           function(transport, json) {
> >>                           //use and handle foo response data
> >>                          }
> >>                          ,
> >>                          on500:
> >>                           function(transport) {
> >>                           //handle error, inform user
> >>                           },
> >>                          onComplete: parseSendMessage
>
> >>                });
>
> >>       }
>
> >> the problem is in action side server.
> >> there is this PHP / ZEND FRAMEWORK code:
>
> >> ....
>
> >>       $request          = urldecode($this->getRequest()-
> >> >getRawBody());
>
> >>       $requestObject = $zendJson->decode($request,
> >> Zend_Json::TYPE_OBJECT);
>
> >> ....
>
> >> Json decoding fails with Syntax Error, for this reason Ajax request  
> >> no
> >> works and is interrupted.
> >> Chrome send a bad json string!
>
> >> Any suggests?
>
> > --
> > You received this message because you are subscribed to the Google  
> > Groups "Prototype & script.aculo.us" group.
> > To post to this group, send email to 
> > prototype-scriptaculous@googlegroups.com
> > .
> > To unsubscribe from this group, send email to 
> > prototype-scriptaculous+unsubscr...@googlegroups.com
> > .
> > For more options, visit this group 
> > athttp://groups.google.com/group/prototype-scriptaculous?hl=en
> > .

-- 
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to prototype-scriptacul...@googlegroups.com.
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en.

Reply via email to