这是我的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成功获得了它的价值。我构建方法的方式可能有问题吗?
答案 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
关键字。