Неожиданный идентификатор "string" в Json, даже если объект имеет правильный тип - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь распечатать все содержимое моих данных .Я попытался проверить, содержит ли моя переменная console.log(data.responseText); Я получил это:

string(3) "all"
[{"ID":"1","Nome":"Sony KD55XF8577","Prezzo":"999.99","Descrizione":"TV QLED 55","QTA":"3","Categoria":"1","Immagine":"KD55XF8577.jpg"},{"ID":"2","Nome":"Samsung QE49Q6FNATXZT","Prezzo":"699.99","Descrizione":"TV QLED 49'' ","QTA":"4","Categoria":"1","Immagine":"QE49Q6FNATXZT.jpg"},{"ID":"3","Nome":"LG 55SK8000PLB","Prezzo":"499.99","Descrizione":"SMART TV LED 55","QTA":"3","Categoria":"1","Immagine":"55SK8000PLB.jpg"}]

, которые являются всеми данными в моей базе данных, так что это правильно.Проблема в том, что когда я пытаюсь сделать JSON.parse(data.responseText).forEach(, я получаю JSON Parse error: неожиданный идентификатор "string" , даже если вы видите данные в правильном формате.

function printData(data){
    $("prodotti").innerHTML="";
    JSON.parse(data.responseText).forEach(
        function(element){
            $("prodotti").innerHTML += "<div class=prodotto id=prodotto"+element["ID"]+">" +
             "<img src=../prodotti/"+element["Immagine"]+">" +
             "<div class=nomeprod>"+element["Nome"]+"</div>" +
             "<div class=prezprod>"+element["Prezzo"]+"&euro;</div>" +
             "<div class=descprod>"+((element["Descrizione"].length > 47)? element["Descrizione"].substring(0, 47)+"...":element["Descrizione"])+"</div>" +
             "<div class=quanprod>rimasti: "+element["QTA"]+"</div></div>";
        }
    );
 }

РЕДАКТИРОВАТЬ: массив, который я получаю, находится в этой строке формата (3) [{obj1}, {obj2}, {obj3}], так что это правильный формат для этой функции JSON, верно?

EDIT2: это то, как я генерирую JSON.Прежде всего, я использовал этот метод:

function request(t){
    type = t;
    new Ajax.Request("../inventario/get_prodotti.php",
    {
        parameters: {
            type: t
        },
        dataType: "json",
        onSuccess: printData
    });
}

Вот функция php: ($ categoryoria = "all")

function getProdotti($categoria){
    $db = databaseConnection();
    $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $query = "SELECT * FROM Prodotto";
    $rows = $db -> query($query);
    return $rows -> fetchAll(PDO::FETCH_ASSOC);
}

getprodotti.php

    <?php
       header('Content-Type: application/json');
       include("../common/stock_functions.php");
       $type = $_POST['type'];
       var_dump($type);
       $rows = getProdotti($type);
   ?>
   <?= json_encode($rows); ?>

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

ваш responseText

string(3) "all"
[{"ID":"1","Nome":"Sony KD55XF8577","Prezzo":"999.99","Descrizione":"TV QLED 55","QTA":"3","Categoria":"1","Immagine":"KD55XF8577.jpg"},{"ID":"2","Nome":"Samsung QE49Q6FNATXZT","Prezzo":"699.99","Descrizione":"TV QLED 49'' ","QTA":"4","Categoria":"1","Immagine":"QE49Q6FNATXZT.jpg"},{"ID":"3","Nome":"LG 55SK8000PLB","Prezzo":"499.99","Descrizione":"SMART TV LED 55","QTA":"3","Categoria":"1","Immagine":"55SK8000PLB.jpg"}]

не является допустимым объектом JSON.Вы ожидаете массив, поэтому json должен выглядеть примерно так (с отступом для ясности)

[
    {"ID":"1",....},
    {"ID":"2",....},
    {"ID":"3",....}
]

, поэтому без "all".Причина, по которой выводится string(3) "all", заключается в том, что вы выгружаете переменную $type;удалите эту строку, и ваш вывод должен быть в порядке

0 голосов
/ 18 декабря 2018

.forEach () работает как Итерация цикла, а аргумент Passed должен иметь тип данных Array, чтобы он мог быть итеративным.Проверьте тип данных вашего аргумента data.responseText, какой это тип данных.Исходя из этого, требуется обновление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...