jquery ajax打电话花了太长时间

时间:2011-08-11 02:43:05

标签: javascript jquery ajax api

我有一张表格,我希望在提交之前确保PayPal电子邮件地址有效。所以我正在进行这样的jquery提交调用

        $('#new_user').submit(function(){
            $.ajax({
                type: 'post',
                url: "/validate_paypal",            
                dataType: 'json',
          data: {email : $('#user_paypal_email').val()},
              success: function( data ) {
                if (data.response["valid"] == false){
                        $('#user_paypal_email').closest('.field').addClass('fieldWithErrors');
                        $('#user_paypal_email').append('<span style="color:#E77776;">This is not a valid email address</span>');
                        return false;
               }else{
                        return true;
                 }
                }
        });

但问题是这个调用是一秒钟,页面已经在ajax完成之前刷新....如果我在调用结束时将返回false设置为false我可以看到我的json是正确的但由于某种原因我现在的方式不会完成......关于如何纠正这个问题的任何想法

2 个答案:

答案 0 :(得分:1)

在触发提交事件时立即使用preventDefault()。然后等待来自paypal的响应,然后在表单上调用submit()。

$('#new_user').submit(function(e){
   e.preventDefault();
   var form = $(this);  //save reference to form
            $.ajax({
                type: 'post',
                url: "/validate_paypal",            
                dataType: 'json',
                data: {email : $('#user_paypal_email').val()},
                success: function( data ) {
                  if (data.response["valid"] == false){
                        $('#user_paypal_email').closest('.field').addClass('fieldWithErrors');
                        $('#user_paypal_email').append('<span style="color:#E77776;">This is not a valid email address</span>');
                        return false;
               }else{
                        form.unbind('submit');  //remove binding
                        form.submit(); //submit form
                 }
                }
        });

答案 1 :(得分:0)

如果您想立即执行某些操作,则需要在请求中设置async false