使用匿名函数时,jQuery ajax方法不传递post数据键

时间:2014-07-07 10:48:56

标签: javascript php jquery ajax

我试图将其中一个键作为匿名函数发送到数据参数,但无论它返回什么数据类型,Jquery都不会将它传递给服务器。

示例:

$.ajax({
    type: 'post',
    url: 'http://host.com/cart',
    dataType: 'html',
    data: {
        'quantity': function () {
            var return_obj = [];
            return_obj['1:YTowOnt9'] = '1';
            return return_obj;
        },
        'action': 'cart-update-quantity'
    },
    success: function(data) {
        console.log(data);
    }
});

这有action POST键,但是quantity键是空字符串。我也尝试过字符串和对象。

这个例子正在运作:

$.ajax({
    type: 'post',
    url: 'http://host.com/cart',
    dataType: 'html',
    data: {
        'quantity': {
            '1:YTowOnt9': '1'
        },
        'action': 'cart-update-quantity'
    },
    success: function(data) {
        console.log(data);
    }
});

如何向数据中的quantity密钥发送匿名函数?匿名函数将获得一些表单输入。我也尝试了jQuery serializeArray,但它发送的数据错误。

1 个答案:

答案 0 :(得分:5)

您无需延迟执行匿名函数,因此请立即调用它以返回您的对象:

$.ajax({
    type: 'post',
    url: 'http://host.com/cart',
    dataType: 'html',
    data: {
        'quantity': (function () {
            var return_obj = {};
            return_obj['1:YTowOnt9'] = '1';
            return return_obj;
        })(),
        'action': 'cart-update-quantity'
    },
    success: function(data) {
        console.log(data);
    }
});

这称为IIFE(立即调用函数表达式)。

或者,只需在Ajax调用之前构建对象..在任何情况下,错误都归结为传递函数而不是函数的结果。

*注意:此代码包含Bergi编辑以创建对象(使用{})而不是数组(使用[]

您当然可以简单地将IIFE用于匿名对象声明:

'quantity': (function () {
        return {'1:YTowOnt9': '1'};
    })(),