Javascript最佳实践 - 使用服务器端值

wil*_*ing 7 html javascript server-side client-side hidden-field

在过去的几年里,我总是使用客户端隐藏<input>字段来存储服务器端值并在Javascript域中使用它.

例如,假设我需要从我的应用配置中获取Ajax超时值.

我可能会在我的JSP中存储它:

<input type="hidden" id="ajaxTimeout" value="${serverValue}" />

然后使用它像我的AJAX调用住在外部文件中:

$("#ajaxTimeout").val()
Run Code Online (Sandbox Code Playgroud)

我今天正在讨论这个问题,并建议最好的做法是存储仅在HTML <meta>标记中由Javascript使用的值.
这有关系吗?有没有一种首选的方法来获取仅用于Javascript的服务器端信息?
我的理解是,如果隐藏的输入字段不是表单的一部分,那么用它来存储值是安全的,因为它不会附加到任何请求.话虽如此,我一直认为这确实是一个黑客攻击.

思考?

::编辑::
两个梦幻般的答案:

Kyl*_*uir 3

我们个人会做这样的事情:

var options = {
    selector: '#divId',
    serverSideVariableHere: <%=AspNetProperty %>,
    anotherServerSideVariableHere: <%=AspNetPropertyTwo %>
}
var viewModel = new KnockoutViewModel(options);
ko.applyBindings(viewModel, $(options.selector)[0]);
Run Code Online (Sandbox Code Playgroud)

这只是一个使用 KnockOut JS 的示例,但这个想法可以扩展到您选择使用(或不使用;)的任何 JavaScript 库

然后,我们将这些选项传递给任何使用它们的地方,例如 Knockout ViewModels 或其他。这样我们的 JavaScript 仍然是可测试的,我们可以将任何我们想要的值传递给我们的测试。

  • 请注意,在 ASP 经典或 Asp.Net 网站中,需要额外的操作才能通过 ASP 解析器运行 .js 文件 - 因此需要一些额外的设置。这对性能有潜在的(尽管可能很小)影响。 (2认同)