1

MVCを使用しており、jqueryを介してフォームを送信したいのですが、無効な入力が発生した場合にMVC組み込み検証が機能するように、クリックイベントの「returnfalse」を条件付けました(「event.preventDefault」も試してみました) ")、コントローラーから「成功」jsonリターンを取得した場合。

コードは次のとおりです。

$(document).ready(function () {
    var request;
    $('#formSubmit').click(function (event) {
        request = $.ajax({
            url: '/personManager/loadDetails/',
            type: 'post',
            data: $('form').serialize()
        });
        request.done(function(data){
            if(data=="success")
                event.preventDefault();
            });

        });
    });

私はそれを機能させることができません...私は何を間違えますか?また、jqueryを使用しながら、MVC検証メカニズムを維持するためのより効率的な方法はありますか?

更新:私の願いをもっと簡単に説明しようとすると:クリックイベントのpreventDefaultを条件付けたいので、特定の条件ではフォーム送信を呼び出し、他の条件では呼び出さず、$。ajaxのみが機能します。2つ目は、サーバー側でアクションが実行されていないことを確認した後に発生します。方法があるに違いない、私は推測する...

4

3 に答える 3

6

この問題は、ajaxが非同期であることが原因である可能性があります。同期するように設定すると、コードは正常に機能するはずです。ただし、サーバーが即座に応答しない場合は、ユーザーのブラウザーがフリーズするリスクがあることに注意してください。

于 2012-04-19T15:28:39.757 に答える
1

先週と同じような問題がありました。関数を設定する必要がありasync:falseます$.ajax。デフォルトのイベントは、ajax応答がこれを防ぐ機会を得る前に実行されている可能性があります。これは、AJAXが非同期で実行されるためです。設定async:falseすると、これが発生しなくなります。しかし、@ Kolinkが指摘しているように、これは、応答が失敗した場合にページがフリーズする可能性があることを意味します。

$(document).ready(function (e) {
    var request;
    var preventDefault = false;
    $('#formSubmit').click(function (event) {
        request = $.ajax({
            url: '/personManager/loadDetails/',
            type: 'post',
            data: $('form').serialize()
            , async: false
        });
        request.done(function (data) {
            if (data == "success")
                preventDefault = true;
        });

        if (preventDefault){
           e.preventDefault();
        }

    });
});
于 2012-04-19T15:25:21.460 に答える
0

なぜ使用しないのですか、jQueryは検証しますか?サーバー側固有の検証が必要ですか?すでに検証に組み込まれているmvcを使用していることは承知していますが、jQueryを使用してフォームを送信しているため、検証に使用することもできます。その方法であなたができるので、ただの提案:

$(document).ready(function () {
    $('form').validate({
        rules: {},
        messages: {}
    });
    var request;
    $('#formSubmit').click(function (event) {
            if($('form').valid()){
                request = $.ajax({
                    url: '/personManager/loadDetails/',
                    type: 'post',
                    data: $('form').serialize()
                });
                request.done(function(data){
                    if(data=="success")
                        event.preventDefault();
                    });                     
            }

        });
    });
于 2012-04-19T15:54:05.993 に答える