【问题标题】:Using jQuery, how do you mimic the form serialization for a select with multiple options selected in a $.ajax call?使用 jQuery,您如何模拟在 $.ajax 调用中选择多个选项的选择的表单序列化?
【发布时间】:2008-10-12 03:31:57
【问题描述】:

下面是我的 $.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) {

但我如何将其放入我的数据:部分?

【问题讨论】:

    标签: jquery


    【解决方案1】:

    使用数组怎么样?

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

    编辑:抱歉,这是代码,有几点需要注意:

    '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>
    

    【讨论】:

    • 您可能还需要选择器 $(":selected #selectbox") 其中“#selectbox”是您的选择标签
    • 当我阅读 $.ajax 的文档时...特别是 data:,我得到了您使用数组进行“选择”的答案...jQuery 将输入的参数序列化为数组...所以您获取 &select=parm1&select=parm2&select=parm3 等谢谢
    【解决方案2】:

    感谢@Owen 的回答,我得到了这段代码。

    对于带有 id="mySelect" multiple="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
    

    【讨论】:

    • 啊,很高兴你让它工作了 :) 只是一个注释,serialize() 将值返回为 &select=param 等......而 serializeArray() 将它放在我上面详述的结构中。干杯。
    【解决方案3】:

    表示选择的多个选项的集合的正确方法是使用 数组,即使用 [] 后缀命名 SELECT 标记。
    问题是 jQuery 方法 serialize() 没有正确处理它。
    对于这样的 SELECT,事实上:

    serialize 发送这个数组:a[]=0&a[]=1&a[]=2 PHP以这种方式接收:

    [a] => 数组
        (
            [0] => 0
            [1] => 1
            [2] => 2
        )
    

    真正价值丢失的地方。

    【讨论】:

    • 你为什么认为这是一个 PHP 问题?其他语言知道如何通过 POST 处理数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    相关资源
    最近更新 更多