gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:40:20 26 4
gpt4 key购买 nike

我在主窗体上使用 TIdHTTPServer 和 IdHTTPServer 过程的 CommandGet 创建一个 VCL 窗体应用程序:

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 测试时:'The value of属性“sampleAlert”为 null 或未定义,不是 Function 对象”)。任何想法如何解决它。

最佳答案

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

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

关于javascript - 无法从 TIdHTTPCommandGet 过程 OnCommandGet 访问 .js 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24694019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com