如何在成功输入时返回“TRUE”

时间:2012-09-03 16:41:36

标签: php javascript json

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

我需要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;
});
});

2 个答案:

答案 0 :(得分:0)

你能否在成功时删除提交处理程序并让表单提交为“real”?

替换

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

使用

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

旁注:从成功回调中返回任何内容都不会使表单“执行”其他任何操作。当ajax函数完成时,return false;语句已经执行。你需要重新提交表单,这次没有ajax。

答案 1 :(得分:0)

将异步选项置为false并将结果var设置为ajax函数:

var result = false;

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

return result;