获取对象不支持$ .post上的此操作错误

时间:2013-03-12 11:56:20

标签: javascript asp.net-mvc

这是我的javascript方法:

function AssignDebtor(e) {
        var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
        var debtorId = dataItem.Id;

        $.post({
            url: '@Url.Action("AssignDebtorToUnallocatedReceipt", "Debtor")',
            data: new { unallocatedReceiptId : cdcUnallocatedReceiptId, debtorId : debtorId },
            success: function (result, textStatus, jqXHR) {
                if (result.success) {
                    var window = $("#LookupDebtorWindow").data("kendoWindow");
                    window.close();

                    var grid = $("#UnallocatedReceiptsGrid").data("kendoGrid");
                    grid.dataSource.read();
                }
                else {
                    alert(result.error);
                }
            },
            dataType: 'json'
        });
    }

在运行时,调试器在$ .post行停止,并返回此错误:

  

0x800a01bd - JavaScript运行时错误:对象不支持此操作   动作

debtorId成功获得了它的价值。我构建方法的方式可能有问题吗?

2 个答案:

答案 0 :(得分:3)

new { unallocatedReceiptId : cdcUnallocatedReceiptId, debtorId : debtorId }

看起来像语法错误,但遗憾的是没有。相反,当你尝试使用一个对象(根本不是一个函数)作为构造函数时,它会抛出异常。

只需省略new operator

另外,正如@danludwig所提到的,$.post function具有不同的签名,您不能将对象作为参数传入。而是切换到$.ajax

答案 1 :(得分:2)

$.post不允许您传入javascript对象,它需要更强类型的方法参数。 See the jQuery docs并试一试:

function AssignDebtor(e) {
    var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
    var debtorId = dataItem.Id;

    $.ajax({
        type: 'POST',
        url: '@Url.Action("AssignDebtorToUnallocatedReceipt", "Debtor")',
        data: { unallocatedReceiptId : cdcUnallocatedReceiptId, debtorId : debtorId },
        success: function (result, textStatus, jqXHR) {
            if (result.success) {
                var window = $("#LookupDebtorWindow").data("kendoWindow");
                window.close();

                var grid = $("#UnallocatedReceiptsGrid").data("kendoGrid");
                grid.dataSource.read();
            }
            else {
                alert(result.error);
            }
        },
        dataType: 'json'
    });
}

...或者如果你偏爱$.post,你可以这样做:

function AssignDebtor(e) {
    var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
    var debtorId = dataItem.Id;

    $.post('@Url.Action("AssignDebtorToUnallocatedReceipt", "Debtor")',
        { unallocatedReceiptId : cdcUnallocatedReceiptId, debtorId : debtorId },
        function (result, textStatus, jqXHR) {
            if (result.success) {
                var window = $("#LookupDebtorWindow").data("kendoWindow");
                window.close();

                var grid = $("#UnallocatedReceiptsGrid").data("kendoGrid");
                grid.dataSource.read();
            }
            else {
                alert(result.error);
            }
        },
        'json'
     );
}

注意我还从参数对象中取出new关键字。