鍍金池/ 問答/HTML/ 后端返回的HTML代碼字符串怎么能自動(dòng)渲染到前端頁面

后端返回的HTML代碼字符串怎么能自動(dòng)渲染到前端頁面

前臺(tái)用 form 表單的形式提交數(shù)據(jù),后臺(tái)通過 res.render(用的ejs) 可以正常渲染前端的頁面,后臺(tái)代碼如下:

router.post('/classifyadd', (req, res) => {
    let {classifyname} = req.body;
    Classify.create({
        name: classifyname
    }).then(doc => {
        responseData.msg = doc.name;
        
        res.render('admin/frame', {
            page: 'successtip'
        });
    });
});

問題是:當(dāng)我用 ajax 的形式提交數(shù)據(jù),后臺(tái)同樣的寫法,前端卻不能渲染,我看了響應(yīng)頭也確實(shí)是 Content-Type: text/html; charset=utf-8?

我知道前端拿到數(shù)據(jù)后可以通過 innerHTML 的形式塞進(jìn)頁面,但不確定這是不是一個(gè)正確的方法?

還是用 AJAX 請(qǐng)求時(shí),后端就不能直接渲染(res.render),只能返回?cái)?shù)據(jù),前端拿到數(shù)據(jù)后再操作DOM,還有其他方法嗎?

同樣的問題鏈接,還沒有一個(gè)好的方案。謝謝各位!

回答
編輯回答
獨(dú)特范

你這前一句說innerHTML不是正確的方式,后一句又要操作DOM,過去的數(shù)據(jù)塞進(jìn)DOM樹。

悟: 你該不會(huì)是甲方吧!
2018年3月31日 11:54
編輯回答
掛念你

應(yīng)該只返回純數(shù)據(jù),前端再渲染成 HTML。直接 innerHTML 有可能導(dǎo)致 XSS 攻擊。

2017年2月28日 15:46
編輯回答
萌面人

這里糾正你一下,html形式的其實(shí)是是當(dāng)初為了返回XML格式的數(shù)據(jù)。本來ajax就是為了異步交互,返回輕量數(shù)據(jù),自己渲染。你直接懟個(gè)頁面回來。那你還要啥ajax。直接表單提交豈不美滋滋。

當(dāng)然,不是說你這樣做不可以。你就說你再后端組好了,直接過來了。也行。方案就是innerHTML寫進(jìn)去。

如果你是不明白怎么交互,可以參考一下我自己的文章 簡(jiǎn)單的前后端交互流程(AJAX)

2018年6月15日 06:02