Php не может анализировать данные json в ajax

Вопрос очень часто встречается в stackoverflow. Я использовал слишком много решений, представленных на этом форуме, для таких проблем, как моя. но это не помогло. Итак, я публикую это. Пожалуйста, будьте любезны, ответьте мне.

Проблема: Я пытаюсь отправить целое число из функции контроллера cakephp для просмотра вызова ajax. Я продолжаю получать эту ошибку для всех решений, которые я пробовал здесь и на других форумах.

"SyntaxError: Unexpected token a in JSON at position 0"

Скажите, пожалуйста, что не так, глядя на мой код: Я ясно вижу, что получаю данные в формате json на php, пока делаю эхо, но не в основном вызове Ajax.

Console says :the result is {"data":1}

Контроллер:

public function addit()
    {
        $mycount      = 1;
        $responseJSON = array(
            'data' => $mycount
        );
        //$responseJSON = array('status' =>'true', 'result'=>$arr);
        header('content-type:application/json');
        $response = json_encode($responseJSON);
        echo $response;
    }

ajaxcall в поле зрения:

$(document).ready(function(){
        $('#bn_cart').click(function(event){
          //alert('clicked');
          var form_data = $(this).serialize();

          var id = $('#id').val();
          alert("your item id is "+ id);
          var csrfToken = <?php echo(json_encode($this->request->getParam('_csrfToken'))) ?>;
               //alert("your form data "+csrfToken);
              event.preventDefault();
              $.ajax({
                headers: {
                      'X-CSRF-Token': csrfToken
                    },
                  url:'../addit',
                  type:'POST',

                  data: { id : id },
                  dataType:'json',

              success:function(xhr, response){
                    var respons = response;
                    console.info("conosle success says "+ (respons.result));
                    alert("success"+respons.result);

                },
              error:function(xhr, e,etype,response){
                    //alert("<br>error<br>"+ error.responseText.message);
                    alert("response = "+ response +"xhr = "+ xhr + "  e = " + e + "  etype = "+ etype);
                    console.info(" response  = " + response + "error  = "+ e +"xhr = "+ xhr + "  etype = "+ etype );
                    //  $("#result").html(error.Message);
                    // alert('error ='+(error.Message));
                  }
          });

        });
    });


Network>Header:
Request URL: http://localhost/shoppingCart/products/addit
Request Method: POST
Status Code: 200 OK
Remote Address: [::1]:80
Referrer Policy: no-referrer-when-downgrade
Cache-Control: no-store, no-cache, must-revalidate
Connection: Keep-Alive
Content-Length: 583
Content-Type: text/html; charset=UTF-8
Date: Tue, 23 Oct 2018 14:10:08 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive: timeout=5, max=99
Pragma: no-cache
Server: Apache/2.4.29 (Win32) OpenSSL/1.0.2n PHP/7.1.15
X-DEBUGKIT-ID: 182187f0-546d-48d4-9e5a-6746a40dba64
X-Powered-By: PHP/7.1.15
Accept: application/json, text/javascript, */*; q=0.01
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Content-Length: 4
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: csrfToken=0a8a1f6e98fe8274e80f9bdcb3ba5df66a5af4296126302d3e79bf44e856ed720438947bb93f041f772ac1e39d083aa2d88c5159697c9843a8b04eace893260b; CAKEPHP=mhphclr8cuvacrlotbit45dd3l; csrftoken=t0p47S5P7NBcwGGQ9sfuNGLi5JJDkll8ifuCWhG3W6MRSIewe9GtRNjanPUqms54
Host: localhost
Origin: http://localhost
Referer: http://localhost/shoppingCart/products/view/2
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
X-CSRF-Token: 0a8a1f6e98fe8274e80f9bdcb3ba5df66a5af4296126302d3e79bf44e856ed720438947bb93f041f772ac1e39d083aa2d88c5159697c9843a8b04eace893260b
X-Requested-With: XMLHttpRequest


Network>>Response : 
{"data":1}
echo "<br>the result is ". $response; сделает ответ недействительным JSON, потому что это недействительный JSON. Просто повторите $response.
Jonnix 23.10.2018 15:42

удалите "<br>" из вашего эха

Masivuye Cokile 23.10.2018 15:46

@JonStirling .. Спасибо за ответ. К сожалению, это пока не помогло .. та же ошибка: response = undefined xhr = [object Object] e = parsererror etype = SyntaxError: Неожиданный токен a в JSON в позиции 0

vins 23.10.2018 15:53

@MasivuyeCokile Спасибо за ответ ... но мне это пока не помогло

vins 23.10.2018 15:53

@vins попробуйте добавить encode:true в настройку ajax и полностью обновить страницу

Masivuye Cokile 23.10.2018 15:55

К вашему сведению, аргументы вашей функции обратного вызова error неверны. Требуется всего три аргумента, а не четыре. Возможно, вы захотите дважды проверить детали .ajax ().

Patrick Q 23.10.2018 16:04

Можете ли вы обновить свой вопрос, чтобы отразить изменения, внесенные вами после предложения Джона? А также включите ответ, который отображается на вкладке «Сеть» вашего браузера (не создаваемый вами вывод консоли, а фактический необработанный ответ).

Patrick Q 23.10.2018 16:06

@PatrickQ спасибо, но это еще не решило мою проблему. :(

vins 23.10.2018 16:08
Какие не решает вашу проблему? Вы все время говорите, что ничего не работает, но на самом деле не продемонстрировали, что вносите какие-либо изменения.
Patrick Q 23.10.2018 16:10

@PatrickQ Обновлено!

vins 23.10.2018 16:20

@PatrickQ что-нибудь еще ???

vins 23.10.2018 16:25

Что если поставить exit; после echo $response;? А есть ли у вас это где-нибудь в открытом доступе?

Patrick Q 23.10.2018 16:36

@PatrickQ нет, мой друг, это не публично, но если хочешь, мы можем поговорить, и я могу показать все (не знаю как). Кстати, выход; похоже, не имеет никакого эффекта, или, по крайней мере, я его не заметил.

vins 23.10.2018 16:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
13
104
1

Ответы 1

Вам нужно вернуть свой ответ в формате json. Вы пытаетесь повторить ответ без кодировки json, который не сработает.

public function addit()
{
    $mycount      = 1;
    $responseJSON = array(
        'data' => $mycount
    );
    //$responseJSON = array('status' =>'true', 'result'=>$arr);
    header('content-type:application/json');
    return json_encode($responseJSON);
}

Вызов Ajax:

success:function(data, status, jqxhr)
            var respons = data;
            console.info("conosle success says "+ (respons.result));
            alert("success"+respons.result);

        },

Вам нужно объяснить OP, что вы сделали, чего он не делал

Masivuye Cokile 23.10.2018 16:04

@Bernard Pagoaga благодарит за ответ. Я пробовал много раз, это дает разные ошибки: response = undefinedxhr = [object Object] e = error etype = Internal Server Error (я еще могу видеть данные в консоли)

vins 23.10.2018 16:05

Также обратный вызов успеха принимает данные в качестве первого параметра, а не объект xhr: api.jquery.com/jquery.ajax.

Bernard Pagoaga 23.10.2018 16:10

Другие вопросы по теме