0

ユーザーの電子メールをJSとPHPで検証し、DBをチェックして電子メールが存在するかどうかを確認する登録フォームがあります。すべてが JSON を使用して 1 つのページで行われます。

成功した結果が必要RETURN TRUEで、登録シーケンスの次のページに進みます。試しwindow.locationてみcase: successたところ、正しいページに移動しましたが、フォームの非表示フィールドが引き継がれません。

誰かがこれをどのように実行すべきかについて私に考えを与えることができますか?

$(document).ready(function(){
$('#newsletter-signup').submit(function(){

    //check the form is not currently submitting
    if($(this).data('formstatus') !== 'submitting'){

        //setup variables
        var form = $(this),
            formData = form.serialize(),
            formUrl = form.attr('action'),
            formMethod = form.attr('method'), 
            responseMsg = $('#signup-response');

        //add status data to form
        form.data('formstatus','submitting');

        //show response message - waiting
        responseMsg.hide()
                   .addClass('response-waiting')
                   .text('Please Wait...')
                   .fadeIn(200);

        //send data to server for validation
        $.ajax({
            url: formUrl,
            type: formMethod,
            data: formData,
            success:function(data){

                //setup variables
                var responseData = jQuery.parseJSON(data), 
                    klass = '';

                //response conditional
                switch(responseData.status){
                    case 'error':
                        klass = 'response-error';
                    break;
                    case 'success':
                        klass = 'response-success';
                        //return true; I tried this but it fails.
                    break;  
                }

                //show reponse message
                responseMsg.fadeOut(200,function(){
                    $(this).removeClass('response-waiting')
                           .addClass(klass)
                           .text(responseData.message)
                           .fadeIn(200,function(){
                               //set timeout to hide response message
                               setTimeout(function(){
                                   responseMsg.fadeOut(200,function(){
                                       $(this).removeClass(klass);
                                       form.data('formstatus','idle');
                                   });
                               },3000)
                            });
                });
            }
        });
    }

    //prevent form from submitting
    return false;
});
});
4

2 に答える 2

0

成功時に送信ハンドラーを削除して、フォームを「本物」に送信させることはできませんか?

交換

//return true; I tried this but it fails.

$('#newsletter-signup').unbind('submit').submit();

補足: 成功のコールバックから何かを返しても、フォームは他のことを「実行」しません。ajax関数が完了すると、return false;ステートメントはすでに実行されています。今回は ajax を使用せずに、フォームを再度送信する必要があります。

于 2012-09-03T17:14:27.903 に答える
0

asyncronous オプションを false に設定し、結果変数を ajax 関数からセットアップします。

var result = false;

$.ajax(
{
    ...
    async: false,
    ...
    success: function(response)
    {
        ...
        ...
        result = true;
    }
});

return result;
于 2012-09-03T17:20:16.697 に答える