1

これは非常に一般的な(NuBee?)問題のように思われるので、あちこち検索してみましたが、何もうまくいきませんでした...だからここにあります

端的に言うと、私の Razor コード (後で示します) は ajax フォームを MVC4 アクションに投稿します。これは正常に動作しますが、コールバック関数をフォーム ( など) に追加しようとすると、コールバック関数OnSuccessOnBegin実行時エラーで失敗します。定義されていません。これは、例外が発生した直後の 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 が 2 つの Jquery-UI バージョンの参照を作成する理由がわかりません...理由がわかりませんでした。

なぜコールバック関数が定義されていないのですか??

助けてくれてありがとう

4

2 に答える 2

0

のスコープはendAskQuestion、ドキュメントの準備ができたときに jQuery が呼び出す無名関数に限定されます。ps2goat が言うように、$(document).ready コールバックから取り出す必要があります。このようにして、グローバルに定義され、AJAX に使用している callbakc を閉じることでアクセスできるようになります。スコーピング、クロージャー、匿名について読んでください。

于 2013-10-21T07:31:48.530 に答える