<div class="gmail_quote">Hello there fellow smalltalkers.<div><br>I am using JQuery alot and some plugins rely on the jquery data to be processed as a dictionary instead of a query string generated by JSJoin when using a POST request.<br>
By default  the data object in JQAjax is serialized like this:<br>
<br><font face="&#39;courier new&#39;, monospace">bind(&quot;move_node.jstree&quot;, function(e, data) {<br>            data.rslt.o.each(function(i) {<br>                $.ajax({<br>                    type: &quot;POST&quot;,<br>

                    data: [&quot;event=move_node.jstree&quot;, &quot;performcopy=&quot; + <a href="http://data.rslt.cy" target="_blank">data.rslt.cy</a>, &quot;id=&quot; + $(this).attr(&quot;id&quot;), &quot;metadata=&quot; + JSON.stringify($(this).data(&quot;jstree&quot;)), &quot;ref_id=&quot; + data.rslt.np.attr(&quot;id&quot;), &quot;ref_metadata=&quot; + JSON.stringify(data.rslt.np.data(&quot;jstree&quot;)), &quot;position=&quot; + data.rslt.cp + i, &quot;title=&quot; + <a href="http://data.rslt.name" target="_blank">data.rslt.name</a>, &quot;_s=eOxqO8i-5PB3xS69&quot;, &quot;_k=ep5WPiUeiuB5Jw_L&quot;, &quot;5&quot;].join(&quot;&amp;&quot;),<br>

                    url: &quot;/questionmanager&quot;<br>                })<br>            })<br></font><br>Which results in a POST with the following params:<br><br><span><font face="&#39;courier new&#39;, monospace">5</font></span><span><font face="&#39;courier new&#39;, monospace">_k</font></span><code><font face="&#39;courier new&#39;, monospace">ep5WPiUeiuB5Jw_L</font></code><span><font face="&#39;courier new&#39;, monospace">_s</font></span><code><font face="&#39;courier new&#39;, monospace">eOxqO8i-5PB3xS69</font></code><span><font face="&#39;courier new&#39;, monospace">event</font></span><code><font face="&#39;courier new&#39;, monospace">move_node.jstree</font></code><span><font face="&#39;courier new&#39;, monospace">id</font></span><code><font face="&#39;courier new&#39;, monospace">questioncategory_3</font></code><span><font face="&#39;courier new&#39;, monospace">metadata</font></span><code><font face="&#39;courier new&#39;, monospace">{&quot;path&quot;:&quot;sandmin/questioncategories/questioncategory_3&quot;,&quot;id&quot;:3}</font></code><span><font face="&#39;courier new&#39;, monospace">performcopy</font></span><code><font face="&#39;courier new&#39;, monospace">undefined</font></code><span><font face="&#39;courier new&#39;, monospace">position</font></span><code><font face="&#39;courier new&#39;, monospace">50</font></code><span><font face="&#39;courier new&#39;, monospace">ref_id</font></span><code><font face="&#39;courier new&#39;, monospace">questioncategories</font></code><span><font face="&#39;courier new&#39;, monospace">ref_metadata</font></span><code><font face="&#39;courier new&#39;, monospace">{&quot;path&quot;:&quot;sandmin/questioncategories&quot;,&quot;id&quot;:&quot;questioncategories1&quot;}</font></code><span><font face="&#39;courier new&#39;, monospace">title</font></span><code><font face="&#39;courier new&#39;, monospace">undefined</font><br>

<br></code>Some values are not correctly translated by javascript because everything is presumed a String.<div>In this example the concatination of position goes wrong because when </div><div><br></div><div><font face="&#39;courier new&#39;, monospace">position=&quot; + data.rslt.cp + i</font></div>

<div><br></div><div>is executed, the variabels data.rslt.cp and i are concatinated as a string because the whole thing is a string. So the data does not arrive in the way I want at the server.</div><div><br></div><div>To fix this issue I made some changes to the data method in JQAjax:</div>

<div><br></div><div>from:</div><div><br></div><div><font face="&#39;courier new&#39;, monospace">JQAjax  data</font></div><div><div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">^self options at: &#39;data&#39; ifAbsentPut: [JSJoin new]</font></div>

<div><br></div><div>to: </div><div><br></div><div><div><font face="&#39;courier new&#39;, monospace">JQAjax  data </font></div><div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">^self options at: &#39;data&#39;</font></div>

<div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">ifAbsentPut: </font></div>
<div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">                        </font></span><font face="&#39;courier new&#39;, monospace">[| type |</font></div>
<div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">                        </font></span><font face="&#39;courier new&#39;, monospace">type := self options at: &#39;type&#39; ifAbsentPut: [&#39;GET&#39;].</font></div>

<div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">                        </font></span><font face="&#39;courier new&#39;, monospace">type = &#39;POST&#39; ifTrue: [GRSmallDictionary new] ifFalse: [JSJoin new]].</font></div>

</div><div><br></div><div>GRSmallDictionary does not understand some methods used by the rest of seaside, so I added them as well:</div><div><br></div><div><div><font face="&#39;courier new&#39;, monospace">GRSmallDictionary  add: anAssociation</font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">anAssociation isVariableBinding</font></div>

<div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">ifTrue: [self at: anAssociation key put: anAssociation value]</font></div>

<div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">ifFalse: [self at: anAssociation put: &#39;&#39;].</font></div>
<div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">^anAssociation</font></div>
</div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><div><font face="&#39;courier new&#39;, monospace">GRSmallDictionary  addAll: aCollection </font></div>

<div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">        </font></span></div><div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">aCollection _addAllToDictionary: self.</font></div>

<div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">^aCollection</font></div>
</div><font face="&#39;courier new&#39;, monospace"><br></font><div><font face="&#39;courier new&#39;, monospace">GRSmallDictionary  collection</font></div><div><span style="white-space:pre-wrap"><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">^self</font></div>

 </div><div>This results in the correct serialization of post requests:</div><div><br></div><div><div><font face="&#39;courier new&#39;, monospace">bind(&quot;move_node.jstree&quot;, function(e, data) {</font></div>
<div><font face="&#39;courier new&#39;, monospace">            data.rslt.o.each(function(i) {</font></div><div><font face="&#39;courier new&#39;, monospace">                $.ajax({</font></div>
<div><font face="&#39;courier new&#39;, monospace">                    type: &quot;POST&quot;,</font></div><div><font face="&#39;courier new&#39;, monospace">                    data: {</font></div>
<div><font face="&#39;courier new&#39;, monospace">                        event: &quot;move_node.jstree&quot;,</font></div><div><font face="&#39;courier new&#39;, monospace">                        performcopy: <a href="http://data.rslt.cy" target="_blank">data.rslt.cy</a>,</font></div>

<div><font face="&#39;courier new&#39;, monospace">                        id: $(this).attr(&quot;id&quot;),</font></div><div><font face="&#39;courier new&#39;, monospace">                        metadata: JSON.stringify($(this).data(&quot;jstree&quot;)),</font></div>

<div><font face="&#39;courier new&#39;, monospace">                        &quot;ref_id&quot;: data.rslt.np.attr(&quot;id&quot;),</font></div><div><font face="&#39;courier new&#39;, monospace">                        &quot;ref_metadata&quot;: JSON.stringify(data.rslt.np.data(&quot;jstree&quot;)),</font></div>

<div><font face="&#39;courier new&#39;, monospace">                        position: data.rslt.cp + i,</font></div><div><font face="&#39;courier new&#39;, monospace">                        title: <a href="http://data.rslt.name" target="_blank">data.rslt.name</a>,</font></div>

<div><font face="&#39;courier new&#39;, monospace">                        &quot;_s&quot;: &quot;Ww1O92fPwzOMnyHw&quot;,</font></div><div><font face="&#39;courier new&#39;, monospace">                        &quot;_k&quot;: &quot;nThH6d1dgDERL5ax&quot;,</font></div>

<div><font face="&#39;courier new&#39;, monospace">                        &quot;5&quot;: null</font></div><div><font face="&#39;courier new&#39;, monospace">                    },</font></div>
<div><font face="&#39;courier new&#39;, monospace">                    url: &quot;/questionmanager&quot;</font></div><div><font face="&#39;courier new&#39;, monospace">                })</font></div>
<div><font face="&#39;courier new&#39;, monospace">            })</font></div></div><div><br></div><div>with the request post parameters:</div><div><br></div><div><span><font face="&#39;courier new&#39;, monospace">5</font></span><span><font face="&#39;courier new&#39;, monospace">_k</font></span><code><font face="&#39;courier new&#39;, monospace">zGF3nB7vsPFGzplS</font></code><span><font face="&#39;courier new&#39;, monospace">_s</font></span><code><font face="&#39;courier new&#39;, monospace">2H-w22qrPABNE-Fl</font></code><span><font face="&#39;courier new&#39;, monospace">event</font></span><code><font face="&#39;courier new&#39;, monospace">move_node.jstree</font></code><span><font face="&#39;courier new&#39;, monospace">id</font></span><code><font face="&#39;courier new&#39;, monospace">questioncategory_4</font></code><span><font face="&#39;courier new&#39;, monospace">metadata</font></span><code><font face="&#39;courier new&#39;, monospace">{&quot;path&quot;:&quot;sandmin/questioncategories/questioncategory_4&quot;,&quot;id&quot;:4}</font></code><span><font face="&#39;courier new&#39;, monospace">position</font></span><code><font face="&#39;courier new&#39;, monospace">6</font></code><span><font face="&#39;courier new&#39;, monospace">ref_id</font></span><code><font face="&#39;courier new&#39;, monospace">questioncategories</font></code><span><font face="&#39;courier new&#39;, monospace">ref_metadata</font></span><code><font face="&#39;courier new&#39;, monospace">{&quot;path&quot;:&quot;sandmin/questioncategories&quot;,&quot;id&quot;:&quot;questioncategories1&quot;}</font></code></div>

<div><br></div><div>the position is now calculated correctly.</div><div><br></div><div>I don&#39;t know where to go from here :) Atleast it works in my Visual Works 7.7 image, But I am unfamiliar with pharo to commit this change.</div>

<div><br></div><div>Is this something Seaside could use?</div><div><br></div><div>And how can i control the serialization of the dictionary keys. Sometimes the are encapsulated by double quotes, and sometimes the aren&#39;t :S.</div>
<div><br></div><div>Regards,</div><div><br></div><div>Bart Veenstra</div><div><br></div><div><br></div><div><code><br><br></code></div>
</div>
</div><br>