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.