提供参数时,jQuery加载回调不会触发?

时间:2013-06-27 19:34:21

标签: jquery asp.net-mvc-3 callback load

当我将参数发布到服务器时,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);
    }
});

1 个答案:

答案 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调用的控制器操作返回整个视图(而不是部分视图)?