React Js .json () не учитывает некоторые данные, доступные из api

Я работаю над проектом, который получает массив целых чисел из API и печатает их на экране. Проблема здесь в том, что POSTMAN показывает, что есть данные в формате json без ошибок, как показано на рисунке, но response js говорит, что данных нет.

Код api, размеры в атрибутах $ нужны только для того, чтобы увидеть, что реакция принимает те, но не принимает другие, которые поступают из базы данных (нажмите, чтобы увидеть код) Это код API.

    public function __construct()
    {
            $this->load->database();
    }

    public function getAllProducts()
    {
            $query = $this->db->get('products');
            return $query->result_array();
    }

    private function cutifyProduct($productResult,$isSingle=false){
            foreach($productResult as $key => $product){
                    $productId = $product['id'];
                    $mediaQuery = $this->db->get_where('media',array('productId'=>$productId));
                    $categoryQuery = $this->db->get_where('categories',array('id'=>$product['categoryId']));

                    $thisProductCategory = $categoryQuery->result_array()[0];
                    $productResult[$key]['categoryTitle'] =  $thisProductCategory['name'];

                    if ($isSingle){
                            //for breadcrumb
                            $breadcrumb = [];

                            $breadcrumb[] = $thisProductCategory;
                            while($thisProductCategory['parentId']!=0){     

                                    $categoryQuery = $this->db->get_where('categories',array('id'=>$thisProductCategory['parentId']));
                                    $thisProductCategory = $categoryQuery->result_array()[0];
                                    $breadcrumb[] = $thisProductCategory;
                            };

                            $productResult[$key]['breadcrumb'] = $breadcrumb;

                            //for product attributes

                            $attributes = [];

                            $tempSizeAttribute = array();
                            $tempColorAttribute = [];
                            $tempStorageAttribute = [];
                            $tempRamAttribute = [];
                            $attributesQuery = $this->db->get_where('attributes',array('productId'=>$productId));
                            $thisProductAttributes = $attributesQuery->result_array();

                            $attributes['size'] = array(
                                    "sizeType"=>"UK",
                                    "sizes"=>array(1,2,3),
                            );
                           foreach($thisProductAttributes as $productAttribute){
                                    if ($productAttribute['title']= = "size"){        
                                            //$attributes['size']['sizes'][] = (int) $productAttribute['name'];
                                            $tempSizeAttribute[]=(int) $productAttribute['name'];
                                    }elseif ($productAttribute['title']= = "color"){
                                            $tempColorAttribute[] = array(
                                                    "productId"=>explode("|",$productAttribute['name'])[0],
                                                    "name"=>explode("|",$productAttribute['name'])[1],
                                            );
                                    }
                            }
                            $attributes['size']['sizes'] =array_merge($attributes['size']['sizes'],$tempSizeAttribute);
                            $productResult[$key]['attributes'] = $attributes;


                            //for vendor information
                            $vendorInfo = [];
                            $vendorQuery = $this->db->get_where('vendors',array('id'=>$product['vendorId']));
                            $vendorResult = $vendorQuery->result_array();
                            $productResult[$key]['vendorDetails'] = $vendorResult;



                    }
                    $productResult[$key]['media'] =  $mediaQuery->result_array();
                    $productResult[$key]['link'] = "/product/".$productResult[$key]['slug'];
                    if ($productResult[$key]['discountPercent']= = "0.00" || $productResult[$key]['discountPercent']==0 || $productResult[$key]['discountPercent']= = "0" || $productResult[$key]['discountPercent']= = "0.0"){
                            $productResult[$key]['price'] =  array(
                                    "current"=> $productResult[$key]['price'],
                            );    
                    }else{
                            $productResult[$key]['price'] =  array(
                                    "current"=> $productResult[$key]['price'] - (($productResult[$key]['discountPercent']*$productResult[$key]['price'])/100),
                                    "previous"=> $productResult[$key]['price'],
                            );
                    }
                    foreach($productResult[$key]['media'] as $mediaKey => $media){
                            if ($isSingle){
                                    if ($media['isPrimary']= = "1" || $media['isPrimary']==1  ){
                                            if (substr( $media['url'], 0, 4 ) != "http"){
                                                    $productResult[$key]['image']= "https://admin.ratomatoshop.com/media/medium/".$media['url'];
                                            }
                                    }

                                            if (substr( $media['url'], 0, 4 ) != "http"){
                                                    $productResult[$key]['images']['medium'][]= "https://admin.ratomatoshop.com/media/medium/".$media['url'];
                                                    $productResult[$key]['images']['original'][]= "https://admin.ratomatoshop.com/media/original/".$media['url'];
                                            }else{
                                                    $productResult[$key]['images']['original'][]=$media['url'];         
                                            }

                            }else{
                                    if ($media['isPrimary']= = "1" || $media['isPrimary']==1  ){
                                            if (substr( $media['url'], 0, 4 ) != "http"){
                                                    $productResult[$key]['image']= "https://admin.ratomatoshop.com/media/small/".$media['url'];
                                            }
                                    }
                            }


                    }
            }
            return $productResult;
    }

    public function getLatestProducts($noOfProducts)
    {
            $this->db->order_by('id', 'DESC');
            $this->db->limit($noOfProducts);
            $query = $this->db->get('products');
            $productResult =  $query->result_array();
            return $this->cutifyProduct($productResult);
    }

    public function getOnSaleProducts($noOfProducts)
    {
            $this->db->order_by('discountPercent', 'DESC');
            $this->db->limit($noOfProducts);
            $query = $this->db->get('products');
            $productResult =  $query->result_array();
            return $this->cutifyProduct($productResult);
    }

    public function getTopRatedProducts($noOfProducts)
    {
            $this->db->order_by('rating', 'DESC');
            $this->db->limit($noOfProducts);
            $query = $this->db->get('products');
            $productResult =  $query->result_array();
            return $this->cutifyProduct($productResult);
    }


    public function getProductData($productSlug)
    {
            $query = $this->db->get_where('products',array('slug'=>$productSlug));
            $productResult =  $query->result_array();
            return $this->cutifyProduct($productResult,true);
    }

    public function getFeaturedProducts($noOfProducts)
    {
            $this->db->order_by('id', 'DESC');
            $this->db->limit($noOfProducts);
            $query = $this->db->get('featuredproducts');
            $results = $query->result_array();
            $products = [];
            foreach($results as $result ){
                    $products[] = $this->getWhere('id',$result['productId']);                
            }
            return $this->cutifyProduct($products);
    }

    public function getSpecialProducts($noOfProducts)
    {
            $this->db->order_by('id', 'DESC');
            $this->db->limit($noOfProducts);
            $query = $this->db->get('specialproducts');
            $results = $query->result_array();


            $products = [];
            foreach($results as $result ){
                    $product = $this->getWhere('id',$result['productId'])[0];
                    $product['dateEnd'] = $result['dateEnd'];
                    $product['discountPercent'] = $result['discountPercent'];
                    $products[] = $product;
            }

            return $this->cutifyProduct($products);
    }

    public function newProduct($productData)
    {
            return $this->db->insert('products',$productData);
    }

    public function isProduct($productId){
            $product  = $this->getWhere('id',$productId);
            if ($product!=null && is_array($product) && count($product)>0){
                    return true;
            }else{
                    return false;
            }
    }

    public function getWhere($key,$value){
        $query = $this->db->get_where('products',array($key=>$value));
        return $query->result_array();
    }

}

Ответ почтальона от api (нажмите, чтобы увидеть код) Это ответ почтальона

"attributes": {
    "size": {
        "sizeType": "UK",
        "sizes": [
            1,
            2,
            3,
            36,
            37,
            38,
            39,
            40
        ]
    }
},

Данные json, которые реагируют, получают. (Нажмите, чтобы увидеть код)

Это журнал консоли реакции:

"attributes": {
    "size": {
        "sizeType": "UK",
        "sizes": [
            1,
            2,
            3,
        ]
    }
},

Добро пожаловать в Stackoverflow. Изображения и скриншоты могут быть хорошим дополнением к сообщению, но убедитесь, что пост по-прежнему понятен и полезен без них. Если вы публикуете изображения кода или сообщения об ошибках, убедитесь, что вы также скопировали и вставили или набрали фактический код / ​​сообщение непосредственно в сообщение.

trixn 09.06.2018 10:45

Практически невозможно, чтобы .json() не учитывал данные в какой-либо форме. Если ответ сервера является допустимым json, он будет в объекте. Откройте свое приложение для реагирования, например, chrome, открываю инспектор, попадаю во вкладку сети и смотри запрос к api. Вы должны увидеть там сериализованный ответ json. Если он не содержит ваших данных, сервер его не отправил.

trixn 09.06.2018 10:57

привет @trixn, я обновил вопрос. Пожалуйста, проверьте еще раз

Ravi Tiwari 09.06.2018 11:02

@trixn то же самое и во вкладке сети. данные там тоже неполные

Ravi Tiwari 09.06.2018 11:04

Тогда проблема явно на стороне сервера. Если ответ содержит данные, вы увидите их там.

trixn 09.06.2018 11:07

@trixn, но поскольку почтальон показывает, что данные есть, в чем может быть проблема. Если возникла проблема на стороне сервера, почтальон тоже не должен был показывать там данные.

Ravi Tiwari 09.06.2018 11:11

Без подробностей сложно сказать. Вы уверены, что сравниваете ответ, отправленный сервером, и ответ, полученный клиентом на один и тот же запрос? Данные так не теряются. Возможно, продукт, который вы загружаете, не имеет ожидаемых атрибутов и $tempSizeAttribute пуст.

trixn 09.06.2018 11:19

Можете ли вы поделиться своим полным кодом API и запросом с помощью выбранного метода? (ПОЛУЧАТЬ)

Michael 09.06.2018 11:22

Если он работает в почтальоне, но вкладка сети показывает разные результаты, убедитесь, что вы отправляете одинаковые заголовки как с запросом почтальона, так и с запросом, который вы делаете в ответ.

TPHughes 09.06.2018 11:22

Как вы оцениваете результат в Postman? (Грубый, красивый, ...)

Michael 09.06.2018 11:23

@trixn Я все проверил, есть данные в атрибуте $ tempSizeAttribute, а сервер - допустимый формат json,

Ravi Tiwari 09.06.2018 13:12

@Michael Я обновил полный код api в вопросе. В реакции и почтальоне я использовал метод POST. Я просматриваю результат в Preety + JSON. Я проверил ответ (от почтальона) и подтвердил, что это действительный JSON.

Ravi Tiwari 09.06.2018 13:20

@TPHughes, как проверить заголовки? Я не проверял, но почти уверен, что заголовки совпадают.

Ravi Tiwari 09.06.2018 13:28

Я не знаю, какой браузер вы используете, но перейдите на вкладку «Инструменты разработчика» и «Сеть». Там вы можете проверить заголовок, а также необработанный ответ. Я думаю, что что-то происходит при переходе от API json response >> response output. @trixn уже упоминалось

Michael 09.06.2018 13:51

хотя ничего не помогло

Ravi Tiwari 09.06.2018 17:51

Этот API общедоступен? Если да, вы можете поделиться вызовом API

Michael 09.06.2018 18:26

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

TPHughes 09.06.2018 19:54

Можете ли вы быть абсолютно уверены в том, что опубликованный вами ответ является точным? Это данные, которые вы получаете до того, как обработаете их каким-либо образом? Зарегистрируйте необработанный ответ от api.

TPHughes 09.06.2018 19:57

@Michael, адрес API: api.ratomatoshop.com/index.php/Products/getProductData/….

Ravi Tiwari 10.06.2018 13:38

Вот результат, который я получил из вашего API: "sizes": [36, 37, 38, 39, 40]. Я думаю, вы получаете их из БД. Как выглядят значения в БД? Это супер странно ...

Michael 10.06.2018 13:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
21
70
0

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