我有一个HTML:
First name: <input type='text' name='first_name' value='' /><br/>
Last name: <input type='text' name='last_name' value='' /><br/>
<input type='checkbox' name='category[]' value='Math' /> Math<br/>
<input type='checkbox' name='category[]' value='Science' /> Science<br/>
<input type='checkbox' name='category[]' value='History' /> History<br/>
etc.....
我想通过mootools ajax发送(使用post方法)所选类别(category []),这样如果我在服务器中转储$ _POST变量,我会得到类似的东西:
array(1) {
[category]=>
array(2) {
[0]=>
string(4) "Math"
[1]=>
string(7) "History"
}
}
javascript(mootools)代码应该是什么?以下是我的部分代码。
new Request.JSON({url: '/ajax_url',
onSuccess: function(){
alert('success');
}
}).post(???);
请注意,我不想发送first_name和last_name字段。我只想发送一个html数组的类别字段。
答案 0 :(得分:1)
您只需要序列化字段:
var theForm = $('form-id');
new Request.JSON({url: '/ajax_url',
onSuccess: function(){
alert('success');
}
}).post(theForm.toQueryString()); // this will create the GET-style query
答案 1 :(得分:1)
这是一种方法:
$("formid").addEvent("submit", function(e) {
e.stop();
var x = {};
this.toQueryString().split('&').each(function(i) {
var p = i.split('=');
if (p[0].contains("[]")) {
p[0] = p[0].replace("[]", "");
if ($type(x[p[0]]) != "array")
x[p[0]] = [];
x[p[0]].push(p[1]);
}
else {
x[p[0]] = p[1];
}
});
// return a number of formats, depends on your backend:
console.log(x, JSON.encode(x), $H(x).toQueryString());
});
这可以输出:
对象(x)或......
json {"first_name":"Dimitar","last_name":"Christoff","category":["Math","Science"]}
或......
查询字符串:first_name=Dimitar&last_name=Christoff&category[0]=Math&category[1]=Science
P.S。你并不打算使用name[]
作为字段名称,这实际上是PHP处理事物的快捷方式,但不适用于客户端imo。
答案 2 :(得分:0)
我会从Prototype JS库中检查这个函数的源代码,看看它是如何工作的:http://github.com/sstephenson/prototype/blob/master/src/dom/form.js#L100处的第100行
可能需要稍微调整才能接受category[]
格式,但这只是一个开始或灵感。