我试过四处搜索,因为在我看来这是一个非常常见的(NuBee?)问题,但没有什么对我有用......所以这里是
为了切断追踪权,我的Razor代码(稍后显示)将ajax形式发布到MVC4动作,该动作很好但是任何尝试向表单添加回调函数(OnSuccess
,{{1} } etc)因运行时错误而失败,未定义回调函数。这是我的Chrome浏览器中错误消息的图像,在异常发生后立即显示:
这是表格的代码:
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版本创建引用...我找不到原因。
为什么没有定义回调函数?
感谢您的帮助
答案 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。阅读范围,闭包和匿名。