当我将参数发布到服务器时,jQuery加载的回调函数不会执行。
这会导致服务器错误,但回调函数会执行:
chassisLookupDialog.load('../Workflow/FindChassisDialog/', function (response, status, xhr) {
console.log("Response", response, status, xhr);
chassisLookupDialog.open();
});
这样可行,参数到达服务器并且不会抛出任何错误,但回调函数永远不会执行:
chassisLookupDialog.load('../Workflow/FindChassisDialog/', {
dataCenterID: dataCenterID,
bladeTemplateID: bladeTemplateID,
selectedChassisID: selectedChassisID,
selectedSlotNumber: selectedSlotNumber
}, function (response, status, xhr) {
console.log("Response", response, status, xhr);
chassisLookupDialog.open();
});
这是我的控制器:
public ActionResult FindChassisDialog(int dataCenterID, int bladeTemplateID, int selectedChassisID, int selectedSlotNumber)
{
FindChassisDialogModel findChassisDialogModel = new FindChassisDialogModel();
return View("FindChassisDialog", findChassisDialogModel);
}
如果我检查服务器的响应,我会看到所有HTML都已正确形成。不知道为什么我的回调不会执行...任何想法?
这将使用视图的html作为错误数据调用错误事件:
$.ajax({
type: 'POST',
dataType: 'json',
url: '../Workflow/FindChassisDialog/',
data: {
dataCenterID: dataCenterID,
bladeTemplateID: bladeTemplateID,
selectedChassisID: selectedChassisID,
selectedSlotNumber: selectedSlotNumber
},
success: function (data) {
console.log("Success:", data);
},
error: function (error) {
console.error("Error:", error);
}
});
答案 0 :(得分:1)
在$.ajax
请求中删除以下行:
dataType: 'json',
我的意思是,你告诉jQuery这个AJAX请求将返回JSON,但你从控制器动作(return View(...)
)返回HTML。因此,当jQuery尝试将其解析为JSON时,它显然会爆炸,并且永远不会执行您的success
回调。
所以:
$.ajax({
type: 'POST',
url: '../Workflow/FindChassisDialog/',
data: {
dataCenterID: dataCenterID,
bladeTemplateID: bladeTemplateID,
selectedChassisID: selectedChassisID,
selectedSlotNumber: selectedSlotNumber
},
success: function (data) {
console.log("Success:", data);
},
error: function (error) {
console.error("Error:", error);
}
});
顺便说一句,对这样的网址进行硬编码是完全错误的:
url: '../Workflow/FindChassisDialog/',
在处理网址时,您应始终在ASP.NET MVC应用程序中使用网址助手。
还有一件事:为什么要从使用AJAX调用的控制器操作返回整个视图(而不是部分视图)?