执行此代码后,asp脚本工作正常。
<!-- #include file="Connection.asp" -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
function Page()
{
var db = new DBConnection;
this.DAL = db.retriveDAL("Content");
var url = new String(Request.ServerVariables("QUERY_STRING")), site = new String(Request.ServerVariables("QUERY_STRING"));
site = url.slice(4, url.indexOf(":80", 0)) + "/";
url = url.slice(url.indexOf("80", 0) + 2, url.length).split("/");
var pageName = url[1], pageID = url[2];
var xmlhttp = Server.CreateObject("Microsoft.XMLHTTP");
xmlhttp.open("POST", site+"library/Datastore.asp?page="+pageName + (pageID ? "id=" + pageID : ""), false);
xmlhttp.send();
var xml = Server.CreateObject("Microsoft.XMLDOM");
xml.async = false;
xml.loadXML(xmlhttp.responseText);
var xsl = Server.CreateObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load(Server.MapPath("templates/" + pageName + ".xsl"));
Response.Write(xml.transformNode(xsl));
}
%>
有人知道为什么吗? 它现在没有理由工作。 它还会禁用网站上的任何asp脚本。
编辑:
我只是禁用了xmlhttp并重新创建了网站,asp工作得很好
编辑2:
我刚刚发现Server.Transfer导致无休止的运行时间
知道为什么吗?
答案 0 :(得分:4)
提示#1:
建立正确的网址。你用
site
+ "library/Datastore.asp?page="
+ pageName
+ (pageID ? "id=" + pageID : "")
但是正确的是
site
+ "library/Datastore.asp?page="
+ Server.URLEncode(pageName)
+ (pageID ? "&id=" + Server.URLEncode(pageID) : "")
//-------------^ !!
提示#2:
而不是
Response.Write(xml.transformNode(xsl));
使用
xml.transformNodeToObject(xsl, Response);
这样您就不会遇到任何输出编码问题。
提示#3:(来自评论:结果证明是错误的。)
Request.ServerVariables("QUERY_STRING")
已经 一个字符串。无需将其包装在显然,来自new String()
中。Request.ServerVariables
的字符串不是JS字符串,因此在这里构建本机String对象非常必要。
提示#4:
要在HTTP服务器上使用(本质上是多线程的),您应该使用Msxml2.ServerXMLHTTP
而不是Microsoft.XMLHTTP
而不是Microsoft.XMLDOM
您应该使用{ {1}}。
答案 1 :(得分:0)
您是否在同一台服务器上调用脚本?如果是这样,您将遇到Session被锁定的问题。当页面具有Session时,它会锁定该用户的Session对象,直到它完成(或超时)。当您在同一服务器上调用第二个页面时,它会在等待释放会话锁定时挂起(这不会像调用页面那样发生)。你最终将页面超时了。
可以通过关闭任一页面的会话来修复。