Используя jQuery, как Вы подражаете сериализации формы для выбора с помощью нескольких опций, выбранных в $ .ajax вызов?

Вот решение:

 const fontList = params.fontList.map((font) => {
        const uniquesubset = _.compact(_.map(_.uniqWith(font.webFontList, (item, itemTwo) => _.isEqual(item.subset, itemTwo.subset)).map(_.property('subset'))));
        if (uniquesubset.length > 0) {
            const subsets = uniquesubset.map((subset) => {
                const webFontList = _.compact(_.map(font.webFontList, webFont => (_.isEqual(webFont.subset, subset) ? _.pick(webFont, ['fontFormat', 'src', ]) : undefined)));
                const updatedWebFontList = _.compact(webFontList);
                return {
                    subset,
                    webFontList: updatedWebFontList,
                };
            });
            return {
                subsets,
                sourceFont: font.sourceFont,
            };
        }
        return {
            sourceFont: font.sourceFont,
            subsets: {
                webFontList: font.webFontList,
            },
        };
    });

Я буду дополнительно оптимизировать его. Но это дает мне именно то, что мне нужно.

5
задан Jay Corbett 12 October 2008 в 04:29
поделиться

3 ответа

как насчет того, чтобы использовать массив?

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

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

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

для serializeArray () для работы, хотя, все элементы формы должны иметь атрибут имени. значение '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>
5
ответ дан 13 December 2019 в 19:38
поделиться

Благодаря ответу от @Owen я заставил этот код работать.

Для избранного поля с идентификатором = "mySelect" несколько = "верный"

    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
4
ответ дан 13 December 2019 в 19:38
поделиться

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

, где теряются реальные ценности.

2
ответ дан 13 December 2019 в 19:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: