Используя jQuery, как вы имитируете сериализацию формы для выбора с несколькими вариантами, выбранными в вызове $ .ajax? - PullRequest
5 голосов
/ 12 октября 2008

Ниже приведен мой вызов $ .ajax. Как поместить выбор (несколько) выбранных значений в раздел данных?

$.ajax({
    type: "post",
    url: "http://myServer" ,
    dataType: "text",
    data: {
        'service' : 'myService',
        'program' : 'myProgram',
        'start' : start,
        'end' : end ,
        },
    success: function(request) {
      result.innerHTML = request ;
    }   // End success
  }); // End ajax method

РЕДАКТИРОВАТЬ Я должен был включить, что я понимаю, как пройти через выбранные опции с этим кодом:

$('#userid option').each(function(i) {
 if (this.selected == true) {

но как мне вписать это в мои данные: раздел?

Ответы [ 3 ]

5 голосов
/ 12 октября 2008

как насчет использования массива?

data: {
    ...
    'select' : ['value1', 'value2', 'value3'],
    ...
},

edit : ах, извините, вот код, несколько предостережений:

'select' : $('#myselectbox').serializeArray(),

для того, чтобы serializeArray () работал, все элементы формы должны иметь атрибут name. значение 'select' выше будет массивом объектов, содержащих имя и значения выбранных элементов.

'select' : [
    { 'name' : 'box', 'value' : 1 },
    { 'name' : 'box', 'value' : 2 }
],

поле выбора для получения вышеуказанного результата будет:

<select multiple="true" name="box" id="myselectbox">
   <option value="1" name="option1" selected="selected">One</option>
   <option value="2" name="option2" selected="selected">Two</option>
   <option value="3" name="option3">Three</option>
</select>
4 голосов
/ 13 октября 2008

Благодаря ответу @Owen, я получил этот код для работы.

Для поля выбора с id = "mySelect" множественный = "true"

    var mySelections = [];
    $('#mySelect option').each(function(i) {
        if (this.selected == true) {
            mySelections.push(this.value);
        }
    });


    $.ajax({
      type: "post",
      url: "http://myServer" ,
      dataType: "text",
      data: {
        'service' : 'myService',
        'program' : 'myProgram',
        'selected' : mySelections
        },
      success: function(request) {
        result.innerHTML = request ;
      }
    }); // End ajax method
2 голосов
/ 04 февраля 2010

Правильный способ представления набора из нескольких выбранных опций - использовать массив , присвоив тегу SELECT суффикс [].
Проблема в том, что он неправильно обрабатывается методом jQuery serialize ().
Для такого выбора, например, Infact:

<select name="a[]">
    <option value="five">5</option>
    <option value="six">6</option>
    <option value="seven">7</option>
</select>

serialize отправляет этот массив: a [] = 0 & a [] = 1 & a [] = 2 полученный PHP таким образом:

[a] => Array
    (
        [0] => 0
        [1] => 1
        [2] => 2
    )

где реальные значения теряются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...