1

我用 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 打开它,我会得到查询字符串。但只有在 IE 之后的第一个“keydown”时才会执行任何操作。

4

2 回答 2

2
  1. 您不必javascript:on___处理程序中使用,就onkeydown="getresponse();"足够了;

  2. IE>=7 支持XMLHttpRequestobject,所以直接检查是否XMLHttpRequest存在比检查navigator 是否为IE 好。例子:

    if(XMLHttpRequest) XMLHttp=new XMLHttpRequest();
    else if(window.ActiveXObject) XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
    
  3. 在您的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);
}
于 2012-10-12T10:19:47.000 回答
1

我的问题与代码无关...我在本地 IIS7 上测试我的脚本,然后双击文件打开了 html 页面。但是您必须通过浏览器(localhost/mypage.htm)打开网页,否则对于浏览器而言,html 和可执行文件具有不同的来源。这是不允许的。

于 2012-10-15T15:35:10.417 回答