PDA

View Full Version : How to send JSON data via 'ajax' proxy to a server by using store.load()?



silent
21 Oct 2011, 12:58 AM
Hey,

how can I add some extra data to my request via a store proxy? The config 'extraParams:' in the proxy's config can only pass normal http parameters with a POST or GET request to the server. Is there a possibility to add custom data like JSON encoded strings to the server?

Thanks in advance!

netemp
21 Oct 2011, 1:05 AM
Is there a possibility to add custom data like JSON encoded strings to the server?

If I understand you correctly, then you want to pass a JSON string like - {key1:value1, key2:value2} - to the server?

If yes, then how about giving this a try:



extraParams:{
jsonStr:{key1:value1, key2:value2}
}

silent
21 Oct 2011, 1:14 AM
If I understand you correctly, then you want to pass a JSON string like - {key1:value1, key2:value2} - to the server?

If yes, then how about giving this a try:



extraParams:{
jsonStr:{key1:value1, key2:value2}
}


That doesn't work. Can I use the writer config to send data with type 'json' - just that the Proxy encodes my data in JSON?

netemp
21 Oct 2011, 1:19 AM
That doesn't work. Can I use the writer config to send data with type 'json' - just that the Proxy encodes my data in JSON?

This has been working fine for me so far. I missed adding the quotes around the JSON string as following:



extraParams:{
jsonStr:'{key1:value1, key2:value2}'
}


This should resolve the issue.

silent
21 Oct 2011, 2:21 AM
This has been working fine for me so far. I missed adding the quotes around the JSON string as following:



extraParams:{
jsonStr:'{key1:value1, key2:value2}'
}


This should resolve the issue.

This will only name the Parameter jsonStr and assign them the value of a pseudo-json object and url encoded, that's bad. and not what I want, because my backend only accepts full JSON objects, nothing else.

Is there another solution to work with this?

netemp
21 Oct 2011, 2:28 AM
This will only name the Parameter jsonStr and assign them the value of a pseudo-json object and url encoded, that's bad. and not what I want, because my backend only accepts full JSON objects, nothing else.

Is there another solution to work with this?

The data can be passed only as a string and will have to be converted into JSON object by your server side technology. This is the same case as we receive an Ajax response and to use it we first decode it through ExtJS.

Which server side technology are you using? Like in PHP, we have json_decode for the same purpose - http://php.net/manual/en/function.json-decode.php

(http://php.net/manual/en/function.json-decode.php)

silent
21 Oct 2011, 2:44 AM
The data can be passed only as a string and will have to be converted into JSON object by your server side technology. This is the same case as we receive an Ajax response and to use it we first decode it through ExtJS.

Which server side technology are you using? Like in PHP, we have json_decode for the same purpose - http://php.net/manual/en/function.json-decode.php

(http://php.net/manual/en/function.json-decode.php)

I'm using Jayrock on a .NET backend. The problem here is, that Jayrock first gets the data from the request and I can't manually decode it. So I need a proper way to insert that, If there's no solution I must write my own proxy class.

silent
21 Oct 2011, 4:05 AM
I've found a solution!

Jayrock is able to process GET requests. I stumbled about at http://groups.google.com/group/jayrock/browse_thread/thread/7b39d07a7635cc51 where Atif Aziz links to a good documentation of Jayrock: http://json-rpc.org/wd/JSON-RPC-1-1-WD-20060807.html#GetProcedureCall

Just a few things to change on the project files:
1. Change on serverside the .NET [JsonRpcMethod("myJayrockNETMethod")] to [JsonRpcMethod("myJayrockNETMethod", Idempotent = true)] to enable GET requests and let jayrock handle the passing parameters.
2. Change your store's proxy 'url:' to '/path/to/yourHandler.ashx/myJayrockNETMethod' to let Ext know, thtt there is the location to pass parameters to.
3. Also change in the proxy config the 'extraParams:' (only if your 'myJayrockNETMethod' needs parameters), just assign in simple "key": "value" notation, like:


[...]
extraParams: {
"user": "peter",
"site": "marketplace"
}
[...]


Ext will encode the parameters to something like '/path/to/yourHandler.ashx/myJayrockNETMethod?user=peter&site=marketplace'

If there are some special chars in the string, they will be encoded. Also a good place to experiment with url-encodings: http://www.albionresearch.com/misc/urlencode.php

Greetings, silent