PHP表单确认无法调用Ajax脚本

时间:2012-11-20 10:45:37

标签: php ajax forms

我有以下PHP / Ajax问题似乎无法找到目前相关的类似问题。我有一个网站,从表单成功发送电子邮件,但脚本的Ajax部分未正确调用。当事情正常工作时,应该发生的是用户点击提交,调用Ajax脚本进行表单验证。这部分工作,然后发送电子邮件,但失败的是,在发送电子邮件关闭提交窗口并说谢谢等后,不会调用Ajax脚本。

我认为我的问题是我在PHP中缺少一行代码来调用Ajax脚本的成功部分。

脚本如下:

PHP代码

<?php 
 $emailTo = myemail@gmail.com';
 $subject=$_REQUEST['subject'];
 $name=$_REQUEST['name'];
 $email=$_REQUEST['email'];
 $msg=$_REQUEST['message'];

 $body = "Name: $name \n\nEmail: $email \n\nMessage: $msg";
 $headers = 'From: '.$name.' <'.$email.'>' . "\r\n" . 'Reply-To: ' . $email;

 mail($emailTo, $subject, $body, $headers); 

?>

Ajax代码

$.ajax({
   type: "POST",
   url: "email.php",
   data: params,
   success: function(response){
    if(response){
     var responseObj = jQuery.parseJSON(response);
     if(responseObj.ResponseData)
      alert(responseObj.ResponseData);
    }
    ResetInput();
    $('#submitButton').removeAttr('disabled');
    ClosePopupWindow();
   },

如果需要,完整的Ajax代码位于以下要点 - https://gist.github.com/4117065

3 个答案:

答案 0 :(得分:2)

我建议你这样做来跟踪错误:

在php中:

if (mail($emailTo, $subject, $body, $headers)){
    echo "success";
} else {
    echo get_last_error();
}

在jq:

if(response == "success"){
   //do your stuff
} else {
   //track the error
   alert(response);
   console.log(response); // you can chose either way, console.log() is the new black xD
}

我最近和ajax / php合作很多,并且在大多数情况下ajax不起作用是因为php引发了某种愚蠢的错误:P

答案 1 :(得分:0)

在.php文件中测试邮件是否已发送错误(返回bool http://php.net/manual/en/function.mail.php$response = mail(...然后json_encode($response['ResponseData'] = $success); 在js中,您引用的是不存在的成员:ResponseData

答案 2 :(得分:0)

php脚本没有回显任何东西,所以响应为null。你可以在php中回复一些东西作为一个重新回复,代码将起作用