Hi,

It's T.J., not J.

> i want convert requestObject in JSON string and send to the server.
>
>  var jsonRequest         =
> encodeURIComponent(JSON.stringify(requestObject));
> new Ajax.Request(baseUrl + '/usermsg/index/sendmessage', {
>             method:     'POST',
>             requestHeaders: {Accept: 'application/json'},
>             parameters:  jsonRequest,
>             //...
>

Let's look at the code I gave you before AGAIN:

>     var jsonRequest = ...;
>     new Ajax.Request( // ...
>         parameters: {json: jsonRequest}
>         // ...
>     });

As you can see, I used jsonRequest. I did that for a reason, so it
would fit in with your original code, which did this:

> var jsonRequest         = JSON.stringify(requestObject);

So:

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: {json: jsonRequest}, // <=== CHANGE IS HERE
                        onSuccess:  function(transport, json) {
                                //use and handle foo response data
                        }
                        ,
                        on500:      function(transport) {
                                //handle error, inform user
                        },
                        onComplete: parseSendMessage
                });
        }

    // ...your code left off here

That tells Prototype to do any URI-encoding necessary for you (you
still have to stringify the object first, which is why I used
jsonRequest, not requestObject). It sends a nice, normal URL-encoded
request (technically an "application/x-www-form-urlencoded" POST) to
the server with a single form field, 'json', whose value is the URL-
encoded jsonRequest string.

Having done that, you ALSO have to change the server side to retrieve
and un-JSON that form field:

>    $request = $_POST["json"];
>    $requestObject = Zend_Json::decode($request); // Or your $zendJson, 
> whatever that is

Now again, this is not the only way to do it. It's _possible_ to send
pure JSON without doing the form wrapper around it as I've done above
(in which case you probably wouldn't URL-encode at all, because you
wouldn't be sending URL-encoded data). You can send any content type
you like with a POST. If you're not sending data in the "application/x-
www-form-urlencoded" encoding, you have to specify what you're doing
by setting the "Content-Type" header (for pure JSON, it would be
"application/json"). You have to handle issues like ensuring there's a
carriage return every couple of hundred characters and such (because
of links in the chain that may handle HTTP poorly).

But whenever possible, I stick to sending standard forms, because
they're convenient and reliable across browsers and servers. Forms
(that is, POST requests with the content type "application/x-www-form-
urlencoded") are well-tested, and well-supported by frameworks. Since
you appear to be in control of both the client and server sides of
what you're building, I'd probably stick with sending a form
containing a field with the JSON in it, rather than going through the
hassle of sending JSON without a form wrapper around it.

Hope this helps,

-- T.J.

On Nov 11, 12:49 am, fashionpeople <[email protected]>
wrote:
> J. Crowder do not get me wrong, I thank you for the effort they put in
> helping others.
>
> i readed about your suggest to send data in this simple way:
>
>     var jsonRequest = ...;
>     new Ajax.Request( // ...
>         parameters: {json: jsonRequest}
>         // ...
>     });
>
> but my question is, i have all based application such statements:
>
>       var requestObject           = new Object();
>       requestObject.idNickRcv = idNickRcv;
>       requestObject.msg          = msg;
>
> i want convert requestObject in JSON string and send to the server.
>
>  var jsonRequest         =
> encodeURIComponent(JSON.stringify(requestObject));
> new Ajax.Request(baseUrl + '/usermsg/index/sendmessage', {
>             method:     'POST',
>             requestHeaders: {Accept: 'application/json'},
>             parameters:  jsonRequest,
>             //...
>
> In this way works only IE and FireWorks. Not on Chrome always decoding
> fails.
> you must use stringify? scriptaculous encodes them alone?
>
> Thank you

-- 
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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en.

Reply via email to