javascript - 解析器错误语法错误: Unexpected number in JSON

标签 javascript php jquery json ajax

我一直在尝试使用 Ajax 从联系表单发送电子邮件。

当邮件发送时,它应该返回一条确认消息: “感谢您与我们联系”。

我没有显示此消息,而是出现了错误:

{"type":"success","message":"thank you for contacting us"} parsererror    SyntaxError: Unexpected number in JSON at position 8
at JSON.parse (<anonymous>)
at parseJSON (jquery.js:4)
at On (jquery.js:6)
at k (jquery.js:6)
at XMLHttpRequest.r (jquery.js:6)`

这是我发送邮件的 PHP 文件:

<?php
require_once 'phpmailer/PHPMailerAutoload.php';

$okMessage = 'thank you for contacting us';


$name = @trim(stripslashes($_POST['name'])); 
$email = @trim(stripslashes($_POST['email'])); 
$subject = @trim(stripslashes($_POST['subject'])); 
$message = @trim(stripslashes($_POST['message'])); 
$societe = @trim(stripslashes($_POST['societe']));
$num = @trim(stripslashes($_POST['num']));

$body = 'Name: ' . $name . "\n\n" . 'Entreprise: ' . $societe . "\n\n" . 'contact Tel: ' . $num . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;

$mail = new PHPMailer();

$mail->IsSMTP();
$mail->Host = 'xxxxx'; 
$mail->Port = xx; //
$mail->CharSet = 'UTF-8';
$mail->SMTPAuth = true; 
$mail->SMTPDebug = 2; 
$mail->Username = "xxxx"; 
$mail->Password = "xxxx"; 


$mail->setFrom('xxxx','xxxx'); 
$mail->addAddress('xxxx'); 
$mail->Subject = $subject;
$mail->Body = $body;
$mail->send();

header('Content-type: application/json');
$status = array(
'type' => 'success',
'message' => $okMessage
);
echo json_encode($status);
die;

这是我的 JS 函数

var form = $('#main-contact-form');
form.submit(function(event){
    event.preventDefault();
    var form_status = $('<div class="form_status"></div>');

    var req = $.ajax({
                url: $(this).attr('action'),
                type: "POST",
                data: form.serialize(),
                dataType : 'json',
                beforeSend: function(){
                    form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
                }
    });

    req.done( function( data, textStatus, jqXHR ){

        console.log( data, textStatus, jqXHR );
        console.warn( jqXHR.responseText);
        form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
    });

    req.fail( function( jqXHR, textStatus, errorThrown ){
        console.log( jqXHR.responseText, textStatus, errorThrown );
        console.warn( jqXHR.responseText);
        form_status.html('<p class="text-error">' + textStatus + '</p>').delay(3000).fadeOut();
    });
});

你能帮我吗?

最佳答案

我已经解决了这个问题。

在浏览器的网络选项卡中,我看到响应不仅仅是 Json。

我发现是参数引起的

$mail->SMTPDebug = 2;

事实上,在以 JSON 格式打印响应之前,它向我返回了服务器和客户端之间的整个对话。 所以我将其替换为

$mail->SMTPDebug = 0;

现在一切都很好。

感谢您的帮助

关于javascript - 解析器错误语法错误: Unexpected number in JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41746932/

相关文章:

php - 一个数据库或单独数据库中的所有客户?

javascript - 摆脱仅参数不同的 jQuery 代码冗余

javascript - 动态更改ckeditor对话框

javascript - 编辑并替换没有元素 ID 的 DOM 节点

javascript - Chrome 扩展 : Get Parameter from URL

javascript - 是否可以从网络请求中确定用户时间?

php - 使用列名从 MySQL 返回 JSON

javascript - 在javascript中设置变量

php - Webhook 使用 Woocommerce 产品详细信息触发计费程序中的产品插入

php - 基于浏览器的游戏 map