使用Request.JSON将html数组作为post变量发送

时间:2010-05-18 02:05:59

标签: javascript ajax arrays json mootools

我有一个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数组的类别字段。

3 个答案:

答案 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

祝你好运。案例:http://www.jsfiddle.net/dimitar/Wxx3b/1/

P.S。你并不打算使用name[]作为字段名称,这实际上是PHP处理事物的快捷方式,但不适用于客户端imo。

答案 2 :(得分:0)

我会从Prototype JS库中检查这个函数的源代码,看看它是如何工作的:http://github.com/sstephenson/prototype/blob/master/src/dom/form.js#L100处的第100行

可能需要稍微调整才能接受category[]格式,但这只是一个开始或灵感。