语法错误:JSON中位置0上的意外令牌<json_encode

时间:2019-01-21 02:41:30

标签: php ajax

我已经看过以前的答案,但是找不到任何东西。

我正在使用它发送我的回复;

echo json_encode($response);

从检查结果中,我收到的结果到响应中的页面;

    <br />
<font size='1'><table class='xdebug-error xe-warning' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Warning: mail(): Failed to connect to mailserver at &amp;quot;localhost&amp;quot; port 25, verify your &amp;quot;SMTP&amp;quot; and &amp;quot;smtp_port&amp;quot; setting in php.ini or use ini_set() in C:\wamp64\www\ci7\php\MailSender.php on line <i>68</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0018</td><td bgcolor='#eeeeec' align='right'>377472</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp64\www\ci7\php\contact.php' bgcolor='#eeeeec'>...\contact.php<b>:</b>0</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0039</td><td bgcolor='#eeeeec' align='right'>400616</td><td bgcolor='#eeeeec'>Apolo\MailSender->send(  )</td><td title='C:\wamp64\www\ci7\php\contact.php' bgcolor='#eeeeec'>...\contact.php<b>:</b>58</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.0040</td><td bgcolor='#eeeeec' align='right'>401224</td><td bgcolor='#eeeeec'><a href='http://www.php.net/function.mail' target='_new'>mail</a>
(  )</td><td title='C:\wamp64\www\ci7\php\MailSender.php' bgcolor='#eeeeec'>...\MailSender.php<b>:</b>68</td></tr>
</table></font>
{"status":"fail","errors":"Could not send a mail, sorry. Please try again."}

但是,我得到了错误,我不确定为什么吗?

这是JavaScript;

        $.ajax({
        url: config.url,
        type: 'POST',
        dataType: 'json',
        data: $form.serialize(),
        success: function(data){
            if(data.status && data.status == 'fail') {
                $.Apolo.modules.alertMessage({
                    target: $form,
                    type: 'error',
                    message: data.errors,
                    icon: 'warning'
                });
                $form.trigger('apolo.contactFormMessage');
                config.onError.call($form, data);
            }
            else if(data.status && data.status == 'success') {
                $.Apolo.modules.alertMessage({
                    target: $form,
                    type: 'success',
                    message: data.statusText,
                    icon: 'check'
                });
                $form.find('input, textarea').val('');
                $form.trigger('apolo.contactFormMessage');
                config.onSuccess.call($form, data);
            }
        },
        error: function(jqXHR, textStatus, errorThrown){
            $.Apolo.modules.alertMessage({
                target: $form,
                type: 'error',
                message: errorThrown,
                icon: 'warning'
            });
            $form.trigger('apolo.contactFormMessage');
            config.onError.call($form, arguments);
        }
    });

3 个答案:

答案 0 :(得分:1)

这是正在发生的事情

  

https://www.kevinleary.net/syntax-error-unexpected-token-json-position-0/

     

如果您看到SyntaxError:JSON中的位置<   浏览器控制台中angular.js:13920或Line 13920或0错误   angular.min.js,那么您可能正在使用HTTP API,   可能使用$ resource或$ http,并且其中一个API出现错误   通知正文中发出通知或警告。

换句话说,您得到的“响应”是 NOT JSON。这是 HTML -HTML错误消息。在末尾带有JSON字符串。

您做的是正确的-XHR请求中同时具有success: function(data)error: function()回调。

您需要:

  1. 确保服务器的“错误”响应导致触发Javascript中的“错误”回调,和/或

  2. 在服务器向任一回调发送非JSON响应时检测。

答案 1 :(得分:1)

好的,我已经通过在邮件函数中添加@来解决了这个问题,该函数消除了x调试错误并给出了清晰的响应,即

            if(@!mail($email, $subject, $message, $headers)){

            $this->addError('Could not send a mail, sorry. Please try again.');
            return false;

        }

答案 2 :(得分:0)

尝试解析对象响应:

var objData = JSON.parse(data);

或在Ajax中

dataType: 'application/json'

或在服务器中

header('Content-Type: application/json');
echo json_encode($response);