首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery ajax等待php响应过程

jQuery ajax等待php响应过程
EN

Stack Overflow用户
提问于 2013-04-02 04:57:38
回答 3查看 1.9K关注 0票数 0

我使用ajax函数发送数据。在php进程中,我运行phpmailer来使用smtp gmail发送电子邮件。一切顺利,但在某些情况下,我希望向用户提供信息,以等待正在进行的过程。我的代码:

代码语言:javascript
复制
LoadingProccess();
var FormData = $('#subscribe').serialize(); 
$.ajax({
    type: "POST",
    url: "proses_corporate.php",
    data: FormData,
    cache: false,
    dataType: "json",
    success: function(data){
        var cek = data.result;
        $.unblockUI();
        if(cek=='Success'){
        $('#subscribe')[0].reset();
        $.blockUI({ 
            message:  '<h4>'+data.status+'</h4>', 
            timeout:   8000 ,
            css: {
              top:  ($(window).height() - 100) /2 + 'px', 
              left: ($(window).width() - 650) /2 + 'px',
              width: '650px'
        }); 
            setTimeout(function() { 
                window.location.href = 'http://www.domain.com/';
            }, 8000);
    }
      setTimeout(function() { 
          window.location.href = 'http://www.domain.com/';
      }, 8000);
    }
   },
         error: function() {
            alert('Error');
         }

});

场景:当我提交时,应用程序将被锁定,并向用户显示进程正在进行的信息。为此,php需要几秒钟时间来处理通过smtp gmail发送的邮件。

在我的php中,json_encode发出命令,命令jquery显示进程已经成功的信息。我的php代码:

代码语言:javascript
复制
function smtpmailer($to, $from, $from_name, $subject, $body) { 
    global $error;
    $mail = new PHPMailer();  // create a new object
    $mail->IsSMTP(); // enable SMTP
    $mail->SMTPDebug = 0;  // debugging: 1 = errors and messages, 2 = messages only
    $mail->SMTPAuth = true;  // authentication enabled
    $mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for GMail
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 465; 
    $mail->Username = GUSER;  
    $mail->Password = GPWD;           
    $mail->SetFrom($from, $from_name);
    $mail->Subject = $subject;
    $mail->Body = $body;
    $mail->AddAddress($to);
    if(!$mail->Send()) {
        $error = 'Mail error: '.$mail->ErrorInfo; 
        return $error;
    } else {
        $error = 'Message sent!';
        return $error;
    }
}

使用

代码语言:javascript
复制
smtpmailer('bertho_joris@yahoo.co.id','berthojoris@gmail.com','GMAIL','Testing Form GMail','Test...Test...Test...Test...');
echo json_encode(array('status' => 'Data has been sent.', 'result' => 'Success'));

与上述代码一样,表单在成功处理后将被路由到特定的页面。在我的例子中,jQuery如何等待动态php的结果才能翻页呢?

您必须在上使用超时: 10000吗?它似乎不是动态的,因为时钟是手动设置的。还有别的办法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-02 08:57:19

在等待响应时,会使ajax请求超时时间更长。e.g

代码语言:javascript
复制
$.ajax({
    type: "POST",
    url: "proses_corporate.php",
    data: FormData,
    cache: false,
    timeout: 30000, // 3 second
    dataType: "json",
    success: function(res){   }, 
    failed: function(err){   }
}
票数 0
EN

Stack Overflow用户

发布于 2013-04-02 08:45:11

您可以在页面上放置一个掩码,并使其在ajaxStart()上可见,然后在ajaxStop()函数上消失或重定向该页。

票数 0
EN

Stack Overflow用户

发布于 2013-04-02 08:47:30

您可以使用beforeSend函数添加掩码。在完成功能时,取下面具。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15756416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档