这可能是一个哲学问题。
假设您正在向页面发出AJAX请求(这是使用Prototype):
new Ajax.Request('target.asp',
{
method:"post",
parameters:{alldata:Object.toJSON(myinfo)},
onSuccess: function(transport){
var response = transport.responseText || "no response text";
alert("Success! \n\n" + response);
},
onFailure: function(){ alert('Something went wrong...') }
});
现在假设在目标页面上,服务器 - 使用ASP - 根据您发送的myinfo对象生成一些JavaScript,并且您对生成的JavaScript感兴趣。我的猜测是,由于这个目标页面从未被浏览器看到(JS解释器所在的位置),因此不会对JS进行评估。如果它被返回到调用页面并进行那里的评估,它将仅进行评估。那是关键吗?
谢谢你为我直接拧我的头。
答案 0 :(得分:1)
target.asp页面上的JS不会在客户端中进行评估,除非您将它eval()或将其推送到DOM或其他内容。
答案 1 :(得分:1)
是的,这个假设是正确的。该Ajax请求的响应只是一个字符串。这需要以某种方式解释嵌入在该响应中的JavaScript也被解释。
答案 2 :(得分:1)
我对ASP不太满意,我会先说出来......
如果服务器正在生成javascript,它将是一个字符串。因此,需要以某种方式将其写入DOM以便有意义(当我说DOM时,我将包括ajax脚本)。
BUT !!!
我知道ASP和.NET非常奇怪,并且喜欢把挂钩和回调放在一起。理论上,ASP 确实说javascript,因此可能有一些自己的js解释器。但我试着在晚上睡觉时认为MS的人不允许他们的服务器端脚本执行任何针对客户端的事情。
简答:是的,如果代码未写入页面,则不应执行代码。您应该将服务器的输出编码为安全的,这只是因为这是一种很好的做法(将<
更改为<
等)。