如何在AJAX情况下在目标页面上评估JavaScript?

时间:2009-09-30 14:44:42

标签: javascript ajax prototypejs

这可能是一个哲学问题。

假设您正在向页面发出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进行评估。如果它被返回到调用页面并进行那里的评估,它将仅进行评估。那是关键吗?

谢谢你为我直接拧我的头。

3 个答案:

答案 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的人不允许他们的服务器端脚本执行任何针对客户端的事情。

简答:是的,如果代码未写入页面,则不应执行代码。您应该将服务器的输出编码为安全的,这只是因为这是一种很好的做法(将<更改为&lt;等)。