我尝试使用本地IIS(Win7)上托管的cgi脚本为javascript函数设置变量:

cgi:

cout<<"Content-type: text/javascript\r\n\r\n";
cout<<"var value=2;";


javascript:

<script type="text/javascript" src="./cgi-bin/value.exe"></script>
<script type="text/javascript">
<!--
document.write('The number is: ' + value);
-->
</script>


但是,当我用js代码document.write打开html文件时,没有执行任何操作。当我用萤火虫分析页面时,在js-tag内以及这些字符中间的某个地方有很多奇怪的字符,我的输出是:“ var value = 2”。

有人知道发生了什么吗?
任何帮助将不胜感激!

编辑:这是萤火虫告诉我的片段,位于脚本标签之间:

MZ�������ÿÿ��¸�������@�����

)��")��4)��F)��\)��p)��z)��)��)��)��¬)��Æ)
��Ø)��)��ô(��Ê(��¼  (��°(��¤(��(��(��(�
(��l(��^(��<(��à(����������@���������È@�û��
������bad allocation��Content-type: text/javascript
���var NumberOfFiles = 2;

?�������������0���������������� ��H���
X@��V�������<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT"
version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b">
</assemblyIdentity>
</dependentAssembly>
</dependency>
/assembly>PAPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDING
XXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADD���0�������


谁能说出此输出来自何处?

最佳答案

似乎在这里很好。自然,您必须从本地主机(或其他服务器)运行它

testCgi.html

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="/cgi-bin/cgiBinNum.cgi"></script>
<script type="text/javascript">
    document.write('The number is: ' + value);
</script>
</head>
<body>
</body>
</html>


cgiBinNum.cpp

#include <iostream>

using namespace std;

int main()
{
    cout<<"Content-type: text/javascript\r\n\r\n";
    cout<<"var value=2;";
    return 0;
}


输出:

<!DOCTYPE html>
<html><head>

<script type="text/javascript" src="/cgi-bin/cgiBinNum.cgi"></script>
<script type="text/javascript">
document.write('The number is: ' + value);
</script></head><body>The number is: 2




</body></html>


是的,“ MZ”立即将其送出-Mark Zbikowski。

基本上,它实际上是在提供exe文件本身,而不仅仅是其结果。

如果您在十六进制编辑器中打开文件,它将看起来非常相似。

当您说这就是您所拥有的“很多”时,细节始终是魔鬼。

还有更多吗?

我有2条建议-
(1)像我所做的那样,提供最小的完整资源来复制您的问题
(2)将文件扩展名更改为.cgi并更改javascript以反映此情况。 (您还应该养成在项目中添加另一个构建目标的习惯,并将其输出文件夹设置到cgi-bin文件夹中,并将其设置为cgi的扩展名,而不是exe。)这应该不会对这个问题有所影响,但是通常最好不要在该文件夹中轻松放置可执行文件-轻松地执行此操作,因为您可以双击它们,它们就会运行,如果您使用完整路径,则始终可以从命令行运行,就像apache一样。

啊!刚意识到您正在使用IIS-我想您会发现b @ stard搞砸了您的输出。可能会引起一点(1)的争议-在我看来,这将是IIS设置-尽管它也可以仅基于文件的扩展名来提供文件的内容,而不是输出的内容。试试看!

关于javascript - 将信息从C++ CGI脚本传递到javascript标签的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12825465/

10-13 06:25