0

我的HTML是这样的

<tbody>
    <tr>
        <td ><img src="" alt="close" /></td>
        <td><input type="hidden" name="addproducts" value="141420">141420</td>
        <td class="prd"><strong><a href=""></a></strong></td>
        <td><a rel="prettyPhoto" href=""><img src="" alt="Product"></a></td> 
    </tr>
    <tr>
        <td ><img src="" alt="close" /></td>
        <td><input type="hidden" name="addproducts" value="1213143">1213143</td>
        <td class="prd"><strong><a href=""></a></strong></td>
        <td><a rel="prettyPhoto" href=""><img src="" alt="Product"></a></td> 
    </tr>
    <tr>
        <td ><img src="" alt="close" /></td>
        <td><input type="hidden" name="addproducts" value="242424">242424</td>
        <td class="prd"><strong><a href=""></a></strong></td>
        <td><a rel="prettyPhoto" href=""><img src="" alt="Product"></a></td> 
    </tr>
</tbody>

我想从中选择名称为 addproducts 的所有隐藏输入并添加到 ajax 调用。问题是我无法预测在代码执行之前会有多少元素。我正在尝试制作的ajax url将是这样的

http://mydomain.com?addproducts=141420&q141420=16&addproducts=X945X2MG&qX945X2MG=1&addproducts=8382355&q8382355=10&addproducts=146353&q146353=3

我在 url 中的特定参数的常用代码将是这样的

  ajaxManager.add(({
    type: 'GET', url: '/ajaxhandler', data: { addproducts: X945X2MG,qX945X2MG:1}

但在这里我不能使用它,因为不可预测的参数。我尝试过的任何方式都以语法错误告终。代码是这样的

  ajaxManager.add(({
            $(this).parent().parent().find(".antal").find("input:hidden[name='addproducts']").map(function () {
                 return
            type: 'GET', data: {addproducts:this.value,'&q'+$(this).val():$(this).next().val()}

编辑:从 Alnitak 的帖子我试图编辑这个。新代码

 var data = $(this).parent().parent().find(".antal")
          .find("input:hidden[name='addproducts']").map(function () {
                 return
               { addproducts: this.value}

                data['q' + $(this).val()] = $(this).next().val();
                   }).get().join(',')

  ajaxManager.add(({
            type: 'GET', data: data

但不幸的是它结束了我的ajax调用是这样的

http://mydomain.com?_=1365768440633

我确信我做了一些非常错误的事情。有人能帮我解决这个问题吗

4

1 回答 1

2

您应该使用已知键创建一个对象文字,然后obj[key]对变量键使用语法:

var data = { 'addproducts[]': [] };

$(this).parent().parent().find(".antal")
       .find("input:hidden[name='addproducts']")
       .each(function () {
            data['addproducts[]'].push(this.value);
            data['q' + this.value] = $(this).next().val();
       });

$.ajax({
    ...,
    data: data
});

请注意使用addproducts[]允许对该特定参数的值数组进行编码。请注意,实际上并没有一个定义的标准来传递具有相同x-www-form-urlencoded数据键的多个值,但这适用于 PHP。您应该考虑更改添加产品的方式 - 也许是逗号分隔的列表?

于 2013-04-12T11:55:49.230 回答