SyntaxError: неожиданный токен <в JSON в позиции 0 json_encode - PullRequest
0 голосов
/ 21 января 2019

Я просмотрел предыдущие ответы, но ничего не могу найти.

Я использую это для отправки моего ответа;

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 голосов
/ 21 января 2019

Вот что происходит:

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

Если вы видите SyntaxError: неожиданный токен <в JSON в позиции Ошибка 0 в консоли браузера на angular.js: 13920 или в строке 13920 или angular.min.js, то, вероятно, вы работаете с HTTP API, возможно, используя $ resource или $ http, и один из API имеет ошибку уведомление или предупреждение в теле ответа. </p>

Другими словами, «ответ», который вы получаете: НЕ JSON. Это HTML - сообщение об ошибке HTML. Со строкой JSON в конце.

Вы поступаете правильно - в вашем запросе XHR есть обратные вызовы success: function(data) и error: function().

Вам необходимо:

  1. Убедитесь, что ответ «ошибка» с сервера приводит к срабатыванию обратного вызова «ошибка» в вашем Javascript и / или

  2. Определить, когда сервер отправляет ответ не в формате JSON на любой обратный вызов.

0 голосов
/ 21 января 2019

Хорошо, я решил проблему, добавив @ в функцию mail, которая устраняет ошибку x-debug и дает чистый ответ, т.е.

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

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

        }
0 голосов
/ 21 января 2019

Попробуйте разобрать ответ объекта:

var objData = JSON.parse(data);

или в Ajax

dataType: 'application/json'

или на сервере

header('Content-Type: application/json');
echo json_encode($response);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...