0

JSONオブジェクトフォームMongoDBをejsテンプレートエンジンでページに送信しようとしています。私のDB(JSONオブジェクト)からの応答は次のとおりです。

"suppliers": [
    {
        "lastname": "lastname1",
        "firstname": "firstname1",
        "middlename": "middlename1",
        "mobtel": "mobtel1",
        "worktel": "worktel1",
        "email": "email1"
    },
    {
        "lastname": "lastname2",
        "firstname": "firstname2",
        "middlename": "middlename2",
        "mobtel": "mobtel2",
        "worktel": "worktel2",
        "email": "email2"
    }
]

DB から i をオブジェクトとして取得したら、それを str に文字列化して、EJS テンプレート エンジンの var として送信する必要があります。

var myJSONText = JSON.stringify(doc.suppliers);
profile["suppliers"] =myJSONText;
...
res.render('profile.ejs',{profile:profile});

フロントエンドでは、json-data を含むプレーンな文字列を取得します。jQuery を介してオブジェクトに解析します。

var jsonObject = jQuery.parseJSON('<%= profile.suppliers %>');
for (var i=0; i<jsonObject.length; i++){
    //trying to show field 'name' for every supplier
    alert(jsonObject[i]['lastname']);
}

...機能しませんが、2回警告する必要があります。フロントエンドに来て、プレーンテキストのJSON文字列を検査しようとしましたが、そのようなシンボルを見つけました:

[{&quot;lastname&quot;: &quot; ... 

そのようjQuery.parseJSONな文字列から有効なオブジェクトを作成できないようです。私が間違っていることは何ですか?ありがとう!

更新:まあ、私は自分のコードを次のように変えました:

NodeJS コード:

profile["suppliers"] =doc.suppliers;
res.render('profile.ejs', { profile:profile });

jQuery コード:

for (var i=0; i<'<%= profile.suppliers %>'.length; i++){
//trying to show field 'name' for every supplier
alert('<%= profile.suppliers %>'[i]['lastname']);
}

そして、未定義のアラートの終わりのないループが発生します。

更新 2: ソース コードを更新したので、次のようにします。

ノードJS:

var myJSONText = JSON.stringify(doc.suppliers);
profile["suppliers"] =myJSONText;
res.render('profile.ejs',{profile:profile});

クライアント:

var jsonObject = <%- profile.suppliers %>;
$.each(jsonObject, function(item) {
    alert(item.lastname);
});

生成されたソース コード:

var jsonObject = [{"lastname":"lastname1","firstname":"firstname1","middlename":"middlename1","mobtel":"mobtel1","worktel":"worktel1","email":"email1"},{"lastname":"lastname2","firstname":"firstname2","middlename":"middlename2","mobtel":"mobtel2","worktel":"worktel2","email":"email2"}];

問題ないようですが、まだ未定義のアラートが表示されます。ただし、アラートは 2 回しか発生しません。つまり、JSON を正しく解析し、lastname プロパティにアクセスできないということですか?

4

2 に答える 2