Javascript Getting对象不支持$.post上的此操作错误

Javascript Getting对象不支持$.post上的此操作错误,javascript,asp.net-mvc,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")',

下面是我的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成功获取其值。我构造方法的方式可能有问题吗?

$。post
不允许传入javascript对象,它需要更多的强类型方法参数。试试这个:

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'
    });
}
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'
     );
}
。。。或者,如果您偏爱
$.post
,您可以这样做:

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'
    });
}
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
关键字。

$。post
不允许您传入javascript对象,它需要更强类型的方法参数。试试这个:

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'
    });
}
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 { unallocatedReceiptId : cdcUnallocatedReceiptId, debtorId : debtorId }
。。。或者,如果您偏爱
$.post
,您可以这样做:

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'
    });
}
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
关键字

new { unallocatedReceiptId : cdcUnallocatedReceiptId, debtorId : debtorId }
看起来像是语法错误,但不幸的是没有。相反,当您尝试使用对象(甚至不是函数)作为构造函数时,它会抛出您遇到的异常

只需省略这个选项

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

看起来像是语法错误,但不幸的是没有。相反,当您尝试使用对象(甚至不是函数)作为构造函数时,它会抛出您遇到的异常

只需省略这个选项


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

您是否链接了jquery?它是发生在您的成功函数中,还是只发生在post声明本身?@JohnEcho yes jquery是链接的,因为没有jquery,代码肯定不会达到它所能达到的程度(使用剑道UI-此方法是在单击自定义网格命令按钮后执行的)@mattytommo它位于post声明本身。为什么要测试result.success(它不应该是jqXHR.success)在成功处理程序中?您是否链接了jquery?它是发生在您的成功函数中,还是仅仅发生在post声明本身?@JohnEcho yes jquery被链接,因为没有jquery代码肯定不会达到它所能达到的程度(使用Kendo UI-此方法是在单击自定义网格命令按钮后执行的)@mattytommo它位于post声明本身。为什么要在成功处理程序中测试result.success(不应该是jqXHR.success)呢?没有对象有名称,所有对象都是“匿名”的。你到底在代码中做了哪些更改?@Bergi好的,我不争辩,我删除了“anonymous”并替换为“javascript object”。我将其从
$.post
更改为
$.ajax
。还有一种替代方法,使用
$.post
和单独的方法函数参数。没有对象有名称,所有对象都是“anonymous”。您在代码中到底做了哪些更改?@Bergi好的,我不会争辩,我删除了“anonymous”并替换为“javascript object”。我将其从
$.post
更改为
$.ajax
。还有一种替代方法是使用带有单独方法函数参数的
$.post