簡體   English   中英

Javascript Ajax回調函數未定義錯誤

[英]Javascript Ajax Callback function not defined error

我嘗試到處搜索,因為在我看來這是一個非常常見的(NuBee?)問題,但對我沒有任何幫助...所以在這里

為了切入正題,我的Razor代碼(稍后顯示)將ajax表單發布到MVC4操作中,該操作可以正常工作,但是任何向該表單添加回調函數的嘗試( OnSuccessOnBegin等)都會失敗,並出現運行時錯誤,即回調函數未定義。 這是發生異常后立即在我的Chrome瀏覽器中顯示的錯誤消息的圖像:

JSChromeError

這是表單的代碼:

    @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>
    <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版本創建引用...我找不到原因。

為什么不定義回調函數?

感謝您的幫助

$(document).ready函數中取出endAskQuestion 另外,請在每條javascript代碼行的末尾使用分號,因為這也會經常引發未定義的錯誤。

$(document).ready(function () {

    //deleted several Jquery and JS functions...

}); // added semicolon here...

// callback function definition should be moved outside
function endAskQuestion() {
    alert("adad");
}

endAskQuestion的范圍限於文檔准備好后jQuery調用的匿名函數。 正如ps2goat所說,您需要將其從$(document).ready回調中刪除。 這樣,它將被全局定義,並且可以通過關閉用於AJAX的callbakc來訪問。 閱讀有關范圍,閉包和匿名用戶的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM