【问题标题】:jQuery AJAX PHPMailer AnomolyjQuery AJAX PHPMailer 异常
【发布时间】:2017-11-27 03:25:41
【问题描述】:

当注册者点击注册时,我通过 ajax 请求调用 php 脚本,该请求创建用户并通过电子邮件发送通知:

$.ajax({
    type: "POST",
    dataType: "json",
    data: dataString,
    url: "includes/register-user.php", 
    success:function(result){
         console.log('Success!);
    }
});

我的 php 在邮件发送上有一个 if 语句:

if($mail->Send()){
     $reply = ['response'=> true, 'message' => 'User successfully registered'];
}     
else{
     $reply = ['response' => false, 'message' => 'An error has occurred'];
}

echo json_encode($reply);

电子邮件已发送和接收,但 jQuery 中的成功功能未触发。 PHP 中没有其他输出,也没有错误,我看到的只是一个 JSON 对象:

{"response":true,"message":"用户注册成功"}

我已经调试了 4 个小时,但毫无意义!

更新:

一般:

请求网址:http://foo.bar/includes/email-register-confirm.php 请求方法:POST 状态码:200 OK 远程地址:127.0.0.1:80 推荐人政策:降级时不推荐人

响应标题:

连接:保持活动状态 内容长度:85 内容类型:文本/html;字符集=UTF-8 日期:格林威治标准时间 2017 年 6 月 23 日星期五 14:12:43 保活:超时=5,最大值=94 服务器:Apache/2.4.23 (Win64) PHP/7.0.10 X-Powered-By:PHP/7.0.10

更新和解决方案

我发现我的 phpmailer 类是用 BOM 文件设置保存的,它在我的 json 回复的开头添加了一个 rougue\ufeff 字符!

【问题讨论】:

  • 您的 ajax 调用是否在响应标头中返回 HTTP 200?
  • F12 -> 网络选项卡 -> 检查响应状态(http 代码、响应等)。
  • "我看到的只是一个 JSON 对象:" ??你从哪里看到的?
  • 我已经用标题更新了问题,@SarathKumar 我在 Network -> Preview 中看到了 json 对象
  • 尝试使用完整的 AJAX 回调而不是成功。您的服务器配置可能存在问题,导致无法成功调用。

标签: php jquery phpmailer


【解决方案1】:

结果可能不是 JSON 格式,所以当 jQuery 尝试解析它时,它会失败。您可以使用 error: 回调函数来捕获错误。

$.ajax({
  type: "POST",
  data: dataString,
  url: "includes/register-user.php", 
  success:function(result){
     var result=JSON.parse(result);
     if(result.response==true){
       console.log("Success");
    }else{
      console.log("Failed!");
     }

  }, error : function(request, status, error) {

    alert("error"+ request.responseText);
}
});

【讨论】:

  • 通过删除请求中的 json 类型,“成功”函数会触发,但是当我检查时,jQuery compalins 在 json 响应中的非法字符上,我看到 *{"response":true,"message ":"用户成功注册"} - 注意对象前面的星星是红色的,当我悬停时我看到 \ufeff
  • 这怎么可能:console.log(result.responseText); {"response":true,"message":"用户成功} 所以 console.log(result.responseText.message); 'undefined'。这怎么可能?
  • 请参考此链接:stackoverflow.com/questions/18029992/… 获取该 * 符号
  • @AlanA console.log(result.responseText);request.responseText 没有回复。
猜你喜欢
  • 2017-09-18
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
相关资源
最近更新 更多