原型Ajax请求参数为嵌套json

Prototype. Ajax request parameters as nested json

本文关键字:嵌套 json 参数 Ajax 请求 原型      更新时间:2023-09-26

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

根据手册,http://www.prototypejs.org/api/ajax/options:

parameters"请求的参数,将被编码到"get"方法的URL中,或编码到其他方法的请求正文中。这可以作为URL编码的字符串提供,也可以作为任何哈希兼容对象(基本上是任何对象)提供,属性表示参数。"

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

有两种方法可以构造Hash实例:第一种是使用新关键字进行常规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&limit=12)。

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

然而,我确实在谷歌小组中发现了这段代码,可能会对你有所帮助。