"parsererror" SyntaxError: Неожиданный токен <в JSON в позиции 0

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

create.php

 <script type = "text/javascript">
        $("#add-product-form").submit(function(e){
            e.preventDefault();
            var formData = new FormData(this);
            console.info(formData);
            var url = "products/ajax_add_single_product";
            $.ajax({
                type:"post",
                url:"<?php echo base_url() ?>"+url,
                data:formData,
                dataType:'json',
                cache: false,
                contentType: false,
                processData: false,
                error: function (jqXHR, textStatus, errorThrown) {
                    console.info(jqXHR,textStatus,errorThrown);
                    error = jqXHR.responseJSON.error;
                    $(".submit-message").html(error);
                    console.info(error);
                    $("html, body").animate({ scrollTop: 0 }, 200);
                },
                success: function (data, textStatus, jqXHR) {
                    message = jqXHR.responseJSON.success;
                    $(".submit-message").html(message);
                    location.href = "/products";
                }
            })
        })
    </script>

контролер

public function create(){
            $data\['title'\] = "Add Product";
            $data\['categories'\] = $this->category_model->get_categories();
            $data\['children'\] = $this->category_model->get_child_cats(0);
            $data\['vendors'\] = $this->vendor_model->get_vendors();
            $data\['attributes'\] = $this->product_model->get_attributes();
            $this->load->view('templates/header', $data);
            $this->load->view('products/create');
            $this->load->view('templates/footer');
        }

        public function ajax_add_single_product(){
            $this->form_validation->set_error_delimiters('<div class = "error">', '</div>');
            $this->form_validation->set_rules('productname', 'Product Name', 'required');
            $this->form_validation->set_rules('partnumber', 'Part Number', 'required|is_unique\[items.itemSKU\]');
            $this->form_validation->set_rules('catID', 'Category', 'required', array('required'=>"You need to pick a %s"));

            header('Content-Type: application/json');
            if ($this->form_validation->run() === FALSE)
            {
                $this->output->set_status_header(400);
                $errors = validation_errors();
                echo json_encode(['error'=>$errors]);
            }
            else
            { 
                $this->output->set_status_header(200);
                $imageData = $this->images_upload();
                $this->product_model->create_product($imageData);
                echo json_encode(['success'=>'Record added successfully.']);
            }
        }

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

&quot;parsererror&quot; SyntaxError: Неожиданный токен &lt;в JSON в позиции 0

Что на самом деле возвращает контроллер? Что такое тело ответа?

Anthony 01.08.2018 00:14

Кроме того, почему вы закомментировали скобки в PHP-коде?

Anthony 01.08.2018 00:16
responseText - это не JSON ... Похоже, он начинается с <!Doctype.... Вы можете использовать что-то вроде getpostman.com для помощи с запросами веб-сервисов.
Scuzzy 01.08.2018 00:19

Я предполагаю, что вы генерируете ошибку Codeigniter в своем контроллере (или где-то еще), и он отображает ошибку как HTML, что и делает.

dgig 01.08.2018 00:30
Поведение ключевого слова "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) для оценки ваших знаний,...
0
4
1 088
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оказывается, в модели была одна строка в функции create_product (). После вставки данных в таблицы я ставлю redirect('/products')after, поэтому получаю html исходный код продуктов страницы.

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