gpt4 book ai didi

javascript - 渲染 JavaScript 模板

转载 作者:行者123 更新时间:2023-12-03 11:39:38 25 4
gpt4 key购买 nike

我希望当用户将鼠标悬停在特定链接上时显示弹出窗口。

为此,我首先通过 Ajax 从服务器请求特定的 JSON 数据。

服务器查询数据库,并转义用户使用htmlspecialchars()提供的任何数据,并回显json_encode($data)

然后,客户端使用以下模板组装 HTML。

客户端然后显示弹出窗口。

我的问题仅与渲染模板有关。

是否有更好的方法可以提供以下一项或全部好处?

  1. 模板更具可读性。
  2. 模板更易于维护。
  3. 模板可以扩展。
  4. 无需创建显示电话号码等的自定义方法。
  5. 网站更安全,免受 XSS 攻击。
  6. htmlspecialchars 转义已从服务器移至客户端。
  7. 还有其他我没有想到的好处?

谢谢

function getTemplate(type,json) {
switch(type) {
case 'person':
return '<dl><dt>Name:</dt><dd>'+((d.firstname&&json.lastname)?json.firstname+' '+json.lastname:((json.firstname)?json.firstname:json.lastname))+'</dd>'
+'<dt>Account:</dt><dd>'+json.account_name+'</dd>'
+((json.title)?'<dt>Title:</dt><dd>'+json.title+'</dd>':'')
+'<dt>User Name:</dt><dd>'+json.username+'</dd>'
+'<dt>Password:</dt><dd>'+json.password+'</dd>'
+'<dt>Communication Method:</dt><dd>'+json.communication_method+'</dd>'
+((json.email)?'<dt>Email:</dt><dd>'+json.email+'</dd>':'')
+((json.account_phone)?'<dt>Account Phone:</dt><dd>'+ayb.display_phone(json.account_phone)+'</dd>':'')
+((json.phone)?'<dt>Direct Phone:</dt><dd>'+ayb.display_phone(json.phone)+'</dd>':'')
+((json.mobile_phone)?'<dt>Mobile Phone:</dt><dd>'+ayb.display_phone(json.mobile_phone)+'</dd>':'')
+((json.account_fax)?'<dt>Account Fax:</dt><dd>'+ayb.display_phone(json.account_fax)+'</dd>':'')
+((json.fax)?'<dt>Direct Fax:</dt><dd>'+ayb.display_phone(json.fax)+'</dd>':'')
+((json.address || json.location)?'<dt>Address:</dt><dd>'+json.address+((json.address && json.location)?'<br>':'')+json.location+'</dd>':'')
+'</dl>';
break;
case 'company':
return 'bla bla bla';
break;
case 'somethingElse':
return 'bla bla bla';
break;
return '<h1>Invalid Template</h1>';
}
}

最佳答案

这是使用 Mustache.js 的一个:

http://plnkr.co/m0NyrpTcKhIicTt0FD4N

html:

<dl><dt>Name:</dt><dd>{{firstname}} {{lastname}} </dd>
<dt>Account:</dt><dd>{{account_name}}</dd>
{{#title}}
<dt>Title:</dt><dd>{{title}}</dd>
{{/title}}
<dt>User Name:</dt><dd>{{username}}</dd>
<dt>Password:</dt><dd>{{password}}</dd>
<dt>Communication Method:</dt><dd>{{communication_method}}</dd>
{{#email}}
<dt>Email:</dt><dd>{{email}}</dd>
{{/email}}
{{#account_phone}}
<dt>Account Phone:</dt><dd>{{#display_phone}}{{account_phone}}{{/display_phone}}</dd>
{{/account_phone}}
</script>

<script type="text/html" id="company">
bla bla
</script>
<script type="text/html" id="somethingElse">
somethingElse bla bla
</script>

json:

  var json = {
"firstname": "Basha",
"lastname": "tasha",
"account_name":"presonal",
"title":"MR",
"username":"basha",
"password":"******",
"communication_method":"phone<b>xss safe</b>",
"account_phone": "1231231234"
};

js:

$(document).ready(function () {
var output = $("#output");
type = "person";
var template = $("#"+type).html();

if(template == undefined) template = "<h1>Invalid Template</h1>";

//you can inject client side callback for phone render before calling Mustache.render(template,json)

json.display_phone= function () {
return function (val, render) {
var phone = render(val);
return phone.replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3');

}
};
var html = Mustache.render(template, json);

output.append(html);

});

XSS 安全

请注意,自定义方法是在 json 数据“display_phone”中发送的

关于javascript - 渲染 JavaScript 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26339699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com