Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jqueryajax调用花费的时间太长或是其他什么_Javascript_Jquery_Ajax_Api - Fatal编程技术网

Javascript jqueryajax调用花费的时间太长或是其他什么

Javascript jqueryajax调用花费的时间太长或是其他什么,javascript,jquery,ajax,api,Javascript,Jquery,Ajax,Api,我有一个表格,我想确保贝宝的电子邮件地址是有效的,然后我提交。因此,我正在进行一个jquery提交调用,如下所示 $('#new_user').submit(function(){ $.ajax({ type: 'post', url: "/validate_paypal", dataType: 'json', dat

我有一个表格,我想确保贝宝的电子邮件地址是有效的,然后我提交。因此,我正在进行一个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({
键入:“post”,
url:“/validate\u paypal”,
数据类型:“json”,
数据:{email:$('#user_paypal_email').val(),
成功:功能(数据){
if(data.response[“valid”]==false){
$('u#user_paypal_email')。最近('.field')。addClass('fieldWithErrors');
$('#user_paypal_email')。append('这不是有效的电子邮件地址');
返回false;
}否则{
返回true;
}
}
});
但问题是这个调用只需一秒钟,在ajax完成之前页面就已经刷新了……如果我在调用结束时将return设置为false,我可以看到我的json是正确的,但由于某种原因,我现在使用的方式无法完成……关于如何更正此问题的任何想法,请使用preventDefault()在触发submit事件时立即执行。然后等待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
                 }
                }
        });
$('new#u user')。提交(函数(e){
e、 预防默认值();
var form=$(this);//保存对表单的引用
$.ajax({
键入:“post”,
url:“/validate\u paypal”,
数据类型:“json”,
数据:{email:$('#user_paypal_email').val(),
成功:功能(数据){
if(data.response[“valid”]==false){
$('u#user_paypal_email')。最近('.field')。addClass('fieldWithErrors');
$('#user_paypal_email')。append('这不是有效的电子邮件地址');
返回false;
}否则{
form.unbind('submit');//删除绑定
form.submit();//提交表单
}
}
});

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

这不是“花费太长时间”,而是异步的,这意味着无论速度有多快,在表单提交之前都不会得到结果。您需要将其更改为同步调用(这意味着在结果出来之前什么都不会发生——从用户的角度来看,可能很难看)或者阻止默认表单提交,然后在获得结果后自行提交。如何将其更改为synchronous@Tamer我在提交之前更新了答案以删除绑定,这样它就不会一直调用自己。如果要使异步调用同步,请使用ajax设置“async:false”