我在GoogleOauth2.js文件中有简单的代码
function storedAccsessToken(token) {
$.ajax({
type: "GET",
url: '<%=HttpContext.Current.Request.ApplicationPath %>/SaveToken.ashx?accToken=' + token,
dataType: "text",
complete: function (resp, status) {
if (status == "success" || status == "notmodified") {
if (resp.responseText != '');
alert(resp.responseText);
window.location = window.location;
}
}
});
}
和
function refresh() {
var akkToken = '<%=Session["googleAccToken"]%>';
$.ajax({
url: 'https://www.googleapis.com/oauth2/v1/userinfo?access_token=' + akkToken,
data: null,
success: function (resp) {
user = resp;
alert(user.name);
},
dataType: "jsonp"
});
}
当我将js文件放入teg head
时<head runat="server">
<title></title>
<script type="text/javascript" src="Scripts/jquery-1.8.2.min.js"></script>
<script src="Scripts/GoogleOauth2.js" type="text/javascript"></script>
</head>
当我启动我的项目并调试js时,我看到&lt;%= Session [“googleAccToken”]%&gt;
编译器将此理解为文本
但是当我把js代码放在简单<script type="text/javascript"></script>
之间的head标签中时,它工作正常,我在会话中得到我的价值我想知道我可以保留这些代码
在单独的文件中,它工作正常
答案 0 :(得分:5)
您的错误是您已将<%= %>
包含在javascript .js
文件中,并且它们无法编译以提供您期望的结果 - 它们保持不变。
有两种可能的解决方案。
以太包含javascript文件之前的变量,ether完全将其移动到页面,以便<%= %>
可以编译。例如,您可以这样做:
<head runat="server">
<script type="text/javascript" src="Scripts/jquery-1.8.2.min.js"></script>
<script>
var akkToken = '<%=Session["googleAccToken"]%>';
var UrlTo = '<%=HttpContext.Current.Request.ApplicationPath %>SaveToken.ashx?accToken=';
</script>
<script src="Scripts/GoogleOauth2.js" type="text/javascript"></script>
</head>
并从akkToken
文件中移除GoogleOauth2.js
,并将url:UrlTo + token
放在另一行也有<%= %>
答案 1 :(得分:1)
这是因为在后一种情况下,javascript是由.NET处理的。当脚本是.NET页面的一部分时,<%= %>
标记将被处理并替换为计算的任何值。
当脚本是外部文件时,浏览器会单独请求它(甚至在后续页面访问时由浏览器缓存),因此.NET不会对其进行处理,从而产生字符串'<%=Session["googleAccToken"]%>'
。 / p>