即使对象的类型正确,Json中的意外标识符“字符串”

时间:2018-12-18 10:29:51

标签: javascript php json ajax

我正在尝试打印数据中的所有内容。我试着用 if (r.result){ msg_typ = 'success'; msg_txt = '<h4>Success!</h4> <p>Issue Note saved</p>'; $('#form-main').trigger('reset'); } else{ msg_typ = 'danger'; msg_txt = '<h4>Error!</h4> <p>'+r.message+'</p>'; } $.bootstrapGrowl(msg_txt, { type: msg_typ, delay: 2500, allow_dismiss: true }); 检查我的变量是否包含它们:

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解析错误:意外的标识符“字符串” ,即使您看到的数据格式正确。

JSON.parse(data.responseText).forEach(

编辑:我得到的数组的格式为string(3)[{obj1},{obj2},{obj3}],所以这是该JSON函数的正确格式,对吗?

EDIT2:这就是我生成JSON的方式。首先,我使用了这种方法:

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>";
        }
    );
 }

这是php函数:($ categoria =“ all”)

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

getprodotti.php

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);
}

2 个答案:

答案 0 :(得分:2)

您的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",....}
]

所以没有“全部”。输出string(3) "all"的原因是因为您正在转储变量$type;删除该行,您的输出应该没问题

答案 1 :(得分:-2)

.forEach()用作循环迭代,并且Passed Argument的数据类型必须为Array,以便可以迭代。检查参数data.responseText的数据类型。在此基础上,进行所需的更新。