Javascript 无法从TIdHTTPCommandGet过程OnCommandGet访问.js文件

Javascript 无法从TIdHTTPCommandGet过程OnCommandGet访问.js文件,javascript,delphi,indy,http-get,Javascript,Delphi,Indy,Http Get,我正在制作一个VCL表单应用程序,主表单上有一个TIdHTTPServer和一个IdHTTPServer过程的CommandGet: procedure TForm6.IdHTTPServerPaymentsCommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); var path: string; content: TFile

我正在制作一个VCL表单应用程序,主表单上有一个TIdHTTPServer和一个IdHTTPServer过程的CommandGet:

procedure TForm6.IdHTTPServerPaymentsCommandGet(AContext: TIdContext;
      ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  path: string;
  content: TFileStream;
begin
  AResponseInfo.CharSet := 'UTF-8';
  path := GetCurrentDir.Remove(GetCurrentDir.Length - 11) + 'index.html'; // Length('Win32\Debug') = 11

  if pos('profile&userName=', ARequestInfo.UnparsedParams) > 0 then
  begin
    content := TFileStream.Create(path, fmOpenReadWrite);

    try
      AResponseInfo.ContentStream := content;
    finally
      content.Free;
    end;
  end;
end;
index.html包含:

<html>
  <head>
    <title>Profile</title>
    <script type="text/javascript" src="scripts/script.js"></script>
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="pragma" content="no-cache"> 
  </head>
<body onload="sampleAlert()"><!-- sample function from script.js -->
<!-- Page content -->
</body>
</html>

轮廓

问题是,当我在浏览器中打开index.html文件时(不启动应用程序),页面工作正常,但当我启动VCL应用程序时,我无法访问script.js(当使用IE9进行测试时:“属性“sampleAlert”的值为null或未定义,不是函数对象”)。你知道怎么解决吗

您的代码始终返回index.html文件,与客户端请求的文档无关。因此,如果客户端收到index.html并尝试呈现它,客户端将检测到对资源scripts/script.js的引用,并向服务器发送一个HTTP GET请求。但是服务器忽略请求资源的名称(在RequestInfo参数中给出),再次读取index.html文件并返回其内容,而不是JavaScript文件。客户端需要一个有效的JavaScript文档,但收到的却是一个HTML文档


要修复它,请检查
ARequestInfo.Document
属性,并返回请求资源的内容。

我还建议使用
AResponseInfo.ContentStream
对于物理文件,只需为其分配一个
TFileStream
。不要使用
TFile.ReadAllText()
将文件读入内存,而只是为了分配
AresOnSeInfo.ContentText
。太过分了。雷米,美赞臣谢谢你的建议。我还有一个问题:使用
ARequestInfo.Document
我无法访问.cssfiles@mitko.berbatov请提供更多细节:提供.js和.css文件的区别在哪里?@mjn.css文件位于'styles/style.css'中;在index.html中添加头标记;在IE9中,我得到:“无法查看此样式表,因为它的源与页面位于不同的域”@mitko.berbatov我建议创建一个新的Stackoverflow问题,并包括一个演示此问题的小HTML示例,作为一个可复制的测试用例。仅错误消息不能提供足够的信息。