从XMLHttpRequest-Object获取responseText

时间:2012-10-12 09:20:02

标签: javascript c++ html web-applications cgi

我用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才会做任何事情。

2 个答案:

答案 0 :(得分:2)

  1. 您不必在javascript:处理程序中使用on___,只需onkeydown="getresponse();"即可;

  2. IE&gt; = 7支持XMLHttpRequest对象,因此直接检查XMLHttpRequest是否存在比检查导航器是否为IE更好。例如:

    if(XMLHttpRequest) XMLHttp=new XMLHttpRequest();
    else if(window.ActiveXObject) XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
    
  3. getresponse()函数中,尝试在开头添加以下代码(open之前):

    try{XMLHTTP.abort();}catch(e){}
    

    因为你正在使用全局对象,所以你可能想在打开另一个连接之前“关闭”它。


  4. 修改

    某些浏览器(可能是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和可执行文件有不同的来源。这是不允许的。