Отправьте HTML-массив как переменную post, используя Request.JSON. - PullRequest
0 голосов
/ 18 мая 2010

У меня есть 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.....

Я хочу отправить (используя метод post) выбранные категории (category []) через mootools ajax, чтобы, если я дам дамп переменной $ _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 ]

1 голос
/ 18 мая 2010

Вам просто нужно сериализовать поля:

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 голос
/ 18 мая 2010

вот один из способов сделать это:

$("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());
});

это может выдать:

объект (х) или ...

JSON {"first_name":"Dimitar","last_name":"Christoff","category":["Math","Science"]} или ...

строка запроса: first_name=Dimitar&last_name=Christoff&category[0]=Math&category[1]=Science

удачи. case: http://www.jsfiddle.net/dimitar/Wxx3b/1/

p.s. вы не должны использовать name[] в качестве имен полей, это действительно быстрый способ для работы с PHP, но не для клиентской версии

0 голосов
/ 18 мая 2010

Я бы изучил исходный код этой функции из библиотеки Prototype JS, чтобы увидеть, как она работает: строка 100 в http://github.com/sstephenson/prototype/blob/master/src/dom/form.js#L100

Может потребоваться небольшая настройка, чтобы принять формат category[], но это начало или вдохновение.

...