0

我有一个注册表单,它使用 JS 和 PHP 验证用户电子邮件,然后检查数据库以查看电子邮件是否存在。一切都发生在一个带有 JSON 的页面上。

我需要成功的结果RETURN TRUE并将我带到注册序列中的下一页。我试过window.locationcase: 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 并将结果 var 设置为 ajax 函数:

var result = false;

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

return result;
于 2012-09-03T17:20:16.697 回答