我用c ++编写了一个cgi脚本,将查询字符串返回给请求的ajax对象。 我还在文件中编写查询字符串,以查看cgi脚本是否正常工作。 但是当我在html文档中询问响应文本显示在消息框中时,我收到一条空白消息。
这是我的代码:
JS:
<script type = "text/javascript">
var XMLHttp;
if(navigator.appName == "Microsoft Internet Explorer") {
XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
} else {
XMLHttp = new XMLHttpRequest();
}
function getresponse () {
XMLHttp.open
("GET", "http://localhost/cgi-bin/AJAXTest?" + "fname=" +
document.getElementById('fname').value + "&sname=" +
document.getElementById('sname').value,true);
XMLHttp.send(null);
}
XMLHttp.onreadystatechange=function(){
if(XMLHttp.readyState == 4)
{
document.getElementById('response_area').innerHTML += XMLHttp.readyState;
var x= XMLHttp.responseText
alert(x)
}
}
</script>
First Names(s)<input onkeydown = "javascript: getresponse ()"
id="fname" name="name"> <br>
Surname<input onkeydown = "javascript: getresponse();" id="sname">
<div id = "response_area">
</div>
C ++:
int main() {
QFile log("log.txt");
if(!log.open(QIODevice::WriteOnly | QIODevice::Text))
{
return 1;
}
QTextStream outLog(&log);
QString QUERY_STRING= getenv("QUERY_STRING");
//if(QUERY_STRING!=NULL)
//{
cout<<"Content-type: text/plain\n\n"
<<"The Query String is: "
<< QUERY_STRING.toStdString()<< "\n";
outLog<<"Content-type: text/plain\n\n"
<<"The Query String is: "
<<QUERY_STRING<<endl;
//}
return 0;
}
我很高兴每个建议该做什么!
编辑:输出到我的日志文件很好:
Content-type: text/plain
The Query String is: fname=hello&sname=world
我刚注意到,如果我用IE8打开它,我会得到查询字符串。但只有在第一次“keydown”之后,IE才会做任何事情。
答案 0 :(得分:2)
您不必在javascript:
处理程序中使用on___
,只需onkeydown="getresponse();"
即可;
IE&gt; = 7支持XMLHttpRequest
对象,因此直接检查XMLHttpRequest
是否存在比检查导航器是否为IE更好。例如:
if(XMLHttpRequest) XMLHttp=new XMLHttpRequest();
else if(window.ActiveXObject) XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
在getresponse()
函数中,尝试在开头添加以下代码(open
之前):
try{XMLHTTP.abort();}catch(e){}
因为你正在使用全局对象,所以你可能想在打开另一个连接之前“关闭”它。
修改强>:
某些浏览器(可能是Firefox本身?)在默认状态下不能很好地处理非“text / xml”响应,所以为了确保事情和内容,请尝试:
function getresponse () {
try{XMLHttp.abort();}catch(e){}
XMLHttp.open("GET", "http://localhost/cgi-bin/AJAXTest?" + "fname=" +
document.getElementById('fname').value + "&sname=" +
document.getElementById('sname').value,true);
if(XMLHttp.overrideMimeType) XMLHttp.overrideMimeType("text/plain");
XMLHttp.send(null);
}
答案 1 :(得分:1)
我的问题与代码无关...... 我在本地IIS7上测试我的脚本,然后双击该文件打开了html页面。但是你必须通过浏览器(localhost / mypage.htm)打开网页,否则对于浏览器来说html和可执行文件有不同的来源。这是不允许的。