原型。 Ajax请求参数作为嵌套的json

时间:2012-09-07 14:01:10

标签: javascript ajax json prototype

我想发送带有特殊参数的请求,如下面列出的示例。但不幸的是,这个脚本只发送id。我如何传输嵌套的JSON?

new Ajax.Request("/specials/update_users_specials", {
    method: 'post',
    parameters: {
        id: '1',
        data: {
            data_one: '2',
            data_two: '3'
        }
    },
    onSuccess:function(){}
});

UPD。
我试过了

var parameters = {}; 
$A(rows).each(function(d){ 
    parameters[d.dataset.userId] = d.value; 
}); 
params={}; 
params['data']=parameters; 
params['part']=45; 

不行。 我试过了

var parameters_json = eval("(" +JSON.stringify(params) + ")");

不行。 现在我已经尝试了

$H({ id: '1', data: { data_one: '2', data_two: '3' } })

同样的结果。

UPD。

我正在使用rails,我的解决方案是:

var parameters = {}; 
$A(rows).each(function(d){ 
    parameters['users[' + d.dataset.userId + ']'] = d.value; 
}); 
parameters['part_id']=id;

1 个答案:

答案 0 :(得分:2)

从手册http://www.prototypejs.org/api/ajax/options

  

parameters''请求的参数,将被编码到“get”方法的URL中,或者编码到其他方法的请求主体中。这可以作为URL编码的字符串或任何Hash兼容的对象(基本上任何东西)提供,其属性表示参数。“

关于哈希,http://www.prototypejs.org/api/hash

  

构造Hash实例有两种方法:第一种是使用new关键字的常规JavaScript对象实例化,第二种是使用$H函数。将纯JavaScript对象或Hash传递给其中任何一个都会克隆它,保持原始对象不变。

所以,用JSON创建一个Hash,你应该很好。

<强>更新

更多来自他们的页面(自从我自己使用原型以来很久以前)http://www.prototypejs.org/learn/introduction-to-ajax

new Ajax.Request('/some_url', {
    method: 'get',
    parameters: {company: 'example', limit: 12}
});
  

参数作为哈希(首选)或由&符号分隔的一对键值对传递(如company = example&amp; limit = 12)。

因此它不理解多维哈希,只是键值对。

但是,我确实发现this snippet of code at Google groups可能会帮助你。