1

我尝试四处搜索,因为在我看来这似乎是一个非常常见的(NuBee?)问题,但对我没有任何帮助......所以它在这里

切入正题,我的 Razor 代码(稍后显示)将 ajax 表单发布到 MVC4 操作,该操作工作正常,但任何尝试向表单(等)添加回调函数都OnSuccess失败OnBegin,并出现回调函数是运行时错误没有定义的。这是我的 Chrome 浏览器中的错误消息的图像,就在发生异常之后:

JSChrome错误

这是表单的代码:

    @using (Ajax.BeginForm("AskQuestion", null, 
        new AjaxOptions() { 
            OnSuccess = "endAskQuestion" },
        new { id = "askQuestionForm" }))
    {
        @Html.AntiForgeryToken() 
        @Html.ValidationSummary(true)

        <fieldset>
            <legend>@ViewBag.Controller</legend>
            <br />
            @{ var investigationID = Model.Investigation.InvestigationID; }
            @Html.HiddenFor(model => investigationID)
            <input type="submit" class="button" value="שלח היגד"/>
            <input type="button" id="cancelEdit" class="button" value="בטל עריכה"/>
        </fieldset>
    }

endAskQuestion以及其中定义的脚本:

$(document).ready(function () {

    //deleted several Jquery and JS functions...

    // callback function definition
    function endAskQuestion() {
        alert("adad");
    }
})

另外,我看到一些帖子指出对 JQuery 和 Ajax 脚本的引用很重要,所以这里是带有引用的 html 的 head 部分:

<head>
    <meta charset="utf-8" />
    <title>RTInvestigation</title>
    <link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />
    <link href="/Content/css?v=_WuF_JGHabtqdWNcwICWILVG9A391eZyF0GO24jlq9U1" rel="stylesheet" type="text/css" />
    <link rel="stylesheet" type="text/css" />
    <script> </script>
    <meta name="viewport" content="width=device-width" />
    <script src="/Scripts/jquery-1.8.2.js"></script>

    <script src="/Scripts/jquery-ui-1.8.18.js"></script>
    <script src="/Scripts/jquery-ui-1.8.20.js"></script>

    <script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
    <script src="/Scripts/jquery.validate.js"></script>
    <script src="/Scripts/jquery.validate.unobtrusive.js"></script>

</head>

我不知道为什么 Razor 会为两个 Jquery-UI 版本创建引用……我找不到原因。

怎么没有定义回调函数??

感谢您的帮助

4

2 回答 2

1

退出函数endAskQuestion$(document).ready此外,在每个 javascript 代码行的末尾使用分号,因为这通常也会引发未定义的错误。

$(document).ready(function () {

    //deleted several Jquery and JS functions...

}); // added semicolon here...

// callback function definition should be moved outside
function endAskQuestion() {
    alert("adad");
}
于 2013-10-21T07:26:48.753 回答
0

您的范围endAskQuestion仅限于文档准备就绪时 jQuery 调用的匿名函数。正如 ps2goat 所说,您需要将其从 $(document).ready 回调中取出。通过这种方式,它将被全局定义,并且可以通过关闭您用于 AJAX 的 callbakc 来访问。阅读有关范围、闭包和匿名的信息。

于 2013-10-21T07:31:48.530 回答