Javascript Ajax回调函数未定义错误

时间:2013-10-21 07:22:04

标签: javascript ajax asp.net-mvc-4

我试过四处搜索,因为在我看来这是一个非常常见的(NuBee?)问题,但没有什么对我有用......所以这里是

为了切断追踪权,我的Razor代码(稍后显示)将ajax形式发布到MVC4动作,该动作很好但是任何尝试向表单添加回调函数(OnSuccess,{{1} } etc)因运行时错误而失败,未定义回调函数。这是我的Chrome浏览器中错误消息的图像,在异常发生后立即显示:

JSChromeError

这是表格的代码:

OnBegin

定义 @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

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

$(document).ready(function () {

    //deleted several Jquery and JS functions...

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

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

为什么没有定义回调函数?

感谢您的帮助

2 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:0)

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