如何使用HTML发送可从Javascript访问的值?
网页上的Javascript通常需要能够访问服务器上已知的变量。例如,用户的用户名。假设我们不希望发出JSON/XML请求,因为这会不必要地增加复杂性和页面点击数。我们希望将数据与html/Javascript一起发送如何使用HTML发送可从Javascript访问的值?,javascript,platform-agnostic,Javascript,Platform Agnostic,网页上的Javascript通常需要能够访问服务器上已知的变量。例如,用户的用户名。假设我们不希望发出JSON/XML请求,因为这会不必要地增加复杂性和页面点击数。我们希望将数据与html/Javascript一起发送 var x={{username}}; 发送数据的一种方法是将数据注入Javascript var x={{username}}; 另一个想法是在头部创建一个元项并将数据存储在那里,然后使用jQuery(或等效工具)检索数据 这两种方法中哪一种更可取,或者还有其他方法我应该考
var x={{username}};
发送数据的一种方法是将数据注入Javascript
var x={{username}};
另一个想法是在头部创建一个元项并将数据存储在那里,然后使用jQuery(或等效工具)检索数据
这两种方法中哪一种更可取,或者还有其他方法我应该考虑吗?< /P> < P>我只会在头中有一个元素,声明一个名为Global对象的包含您的信息的元素。比如:
<script type="text/javascript" >
this.blah = this.blah || {};
this.blah.userinfo = this.blah.userinfo || {};
this.blah.userinfo = {
"username" : "UserName42"
"gender" : "Male"
};
<script>
this.blah=this.blah{};
this.blah.userinfo=this.blah.userinfo | |{};
this.blah.userinfo={
“用户名”:“用户名42”
“性别”:“男性”
};
上面的两行只是初始化全局对象。因为它是全局的,所以我们使用“blah”来命名它的名称空间。我只是在头部有一个元素,它声明了一个包含您的信息的命名良好的全局对象。比如:
<script type="text/javascript" >
this.blah = this.blah || {};
this.blah.userinfo = this.blah.userinfo || {};
this.blah.userinfo = {
"username" : "UserName42"
"gender" : "Male"
};
<script>
this.blah=this.blah{};
this.blah.userinfo=this.blah.userinfo | |{};
this.blah.userinfo={
“用户名”:“用户名42”
“性别”:“男性”
};
上面的两行只是初始化全局对象。由于它是全局的,我们使用“blah”来命名它的名称空间。我认为这个问题有点复杂,因为根据我的经验,对于具有帐户、用户权限等的站点,您很少依赖静态/预创建的HTML页面 通常,这样的站点/应用程序依赖于某种“服务器页面”技术—ASP、JSP、PHP(或通过AJAX请求管理所有这些)—这将允许您编写类似于
的某种标记/服务器代码—当由服务器编译/解释时,将在页面中您希望的位置为您注入用户名
如果出于某种原因,您声称应用程序中并非如此,并向用户提供纯预创建的或静态的HTML,那么您确实必须执行以下操作之一:
1.检索用户名的AJAX请求
我认为你的论点是
这将不必要地增加复杂性和数量
网页点击率
是无效的。技术使用的正确性应优先于(可能不存在的)性能增益。我也不认为这会增加复杂性,相反,您可以将登录的“用户”部分分离到一个模块中,并在其他地方重用它
2.注入JavaScript(或使用元标记)
这一次我不完全确定你将如何做到这一点,并在那之后维护你的页面…我认为这个问题有点复杂,因为根据我的经验,你很少依靠静态/预先创建的HTML页面来访问具有帐户、用户权限等的站点 通常,这样的站点/应用程序依赖于某种“服务器页面”技术—ASP、JSP、PHP(或通过AJAX请求管理所有这些)—这将允许您编写类似于
的某种标记/服务器代码—当由服务器编译/解释时,将在页面中您希望的位置为您注入用户名
如果出于某种原因,您声称应用程序中并非如此,并向用户提供纯预创建的或静态的HTML,那么您确实必须执行以下操作之一:
1.检索用户名的AJAX请求
我认为你的论点是
这将不必要地增加复杂性和数量
网页点击率
是无效的。技术使用的正确性应优先于(可能不存在的)性能增益。我也不认为这会增加复杂性,相反,您可以将登录的“用户”部分分离到一个模块中,并在其他地方重用它
2.注入JavaScript(或使用元标记)
这一次我不完全确定你会怎么做,然后再维护你的页面…你的建议是完全正确的。例如,CoffeeScript、下划线.js和Backbone.js的创建者Jeremy Ashkenas建议在
Accounts.reset();
项目。重置(正确)%>);
你的建议完全正确。例如,CoffeeScript、下划线.js和Backbone.js的创建者Jeremy Ashkenas建议在
Accounts.reset();
项目。重置(正确)%>);
这两种方法中哪一种更可取,或者还有其他方法我应该考虑吗?< /P> 我认为没有一个正确的答案,当然在这个问题上我听到了很多相互矛盾的观点,但是从你提到的两种方法中选择,我会选择将值注入JavaScript,因为我发现这更容易
但是,由于您询问了其他建议,您可以将这两种想法结合起来:服务器端代码可以在
中插入单个
元素,将数据存储在变量中,然后可以直接从任何其他脚本(包括多个源文件中的脚本)访问该变量。您可以将所有数据粘贴到单个对象中,以避免出现大量全局数据:
<html>
<head>
<script>
var dataFromServer = { /* all your server data here */};
</script>
<script type="text/javascript" src="somelibrarycript.js"></script>
<script type="text/javascript" src="someotherscript.js"></script>
<script>
if (dataFromServer.someProperty) {
// someProperty provided above so do something with it...
}
</script>
</head>
etc...
var dataFromServer={/*此处的所有服务器数据*/};
if(dataFromServer.someProperty){
//上面提供了一些属性,请对其进行处理。。。
}
等
这种方法还有一个额外的优点,即服务器端代码基本上只是生成JSON(如果直接包含在页面源代码中,它将成为一个对象文本),因此,如果您以后决定开始使用某种Ajax,您将几乎完全可以使用它