1

我想发送带有特殊参数的请求,如下面的示例所示。但不幸的是,这个脚本只发送 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;
4

1 回答 1

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 中创建一个哈希,你应该会很好。

更新

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

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

参数作为散列(首选)或由 & 号分隔的键值对字符串(如 company=example&limit=12)传入。

因此它不理解多维散列,只理解键值对。

但是,我确实在 Google 群组中找到了可能对您有所帮助的这段代码。

于 2012-09-07T14:08:14.940 回答