1

次のプラグインを使用して、AJAX でファイルをインポートしようとしています -

http://malsup.github.com/jquery.form.js

次の例に基づいて -

http://malsup.com/jquery/form/progress.html

私のビューは次のようになります-

<form action="/MyController/MyAction" enctype="multipart/form-data" id="myFormId" method="post">        
    <input type="file" name="file" id="file">
    <input type="submit" value="Import File"> </div>
</form>
<script type="text/javascript">
    window.onload = function () {
        (function () {
            $('#myFormId').ajaxForm({
                beforeSend: function () {
                    alert('before send');

                },
                success: function () {
                    alert('success');
                },
                complete: function (xhr) {

                    alert('xhr.responseText=' + xhr.responseText);
                }
            });

        })();
    }
</script>

javacsriptwindow.onload = function (){}は呼び出されません。MyActionが呼び出されると、ブラウザは の JSON アクション結果を表示するだけですMyAction

誰かが私が間違っていることを教えてくれますか、またはこれを行う別の方法を提案できますか? どうもありがとう!

4

1 に答える 1

3

window.onload作成したスクリプトはフォームの後に配置されるため、ハンドラーに配置する必要はありません。以下はうまくいくはずです:

@using (Html.BeginForm("MyAction", "MyController", FormMethod.Post, new { enctype = "multipart/form-data", id = "myFormId" }))
{
    <input type="file" name="file" id="file">
    <input type="submit" value="Import File"> </div>
}

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>
<script type="text/javascript">
    (function ($) {
        $('#myFormId').ajaxForm({
            beforeSend: function () {
                alert('before send');
            },
            success: function () {
                alert('success');
            },
            complete: function (xhr) {
                alert('xhr.responseText=' + xhr.responseText);
            }
        });
    })(jQuery);
</script>

また、それを使用するスクリプトの前に含める必要がある jquery.form.js プラグインの前に jquery.js が含まれていることを確認することが重要であることに注意してください。私が示した例では、使用している可能性があり、関数をハイジャックした可能性のある他のプラグインとの競合がないことを確認するために、使用されていた匿名関数にパラメーターとして jQuery も渡しました$

また、FireBug や Chrome 開発者ツールバーなどの JavaScript デバッグ ツールを使用して、すべてのスクリプトが適切に含まれていること (404 がないこと) と、スクリプトの重複や JavaScript エラーがないことを確認することをお勧めします。

于 2013-04-07T16:29:39.097 に答える