2012-10-12 64 views
1

我用C++编写了一个cgi脚本来将查询字符串返回给请求的ajax对象。 我还将查询字符串写入文件以查看cgi脚本是否正常工作。 但是,当我要求在HTML文档中的回应文本显示在一个消息框中我收到一条空白消息。从XMLHttpRequest对象获取responseText

这里是我的代码:

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才会无所作为。

回答

1

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

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

  2. IE> = 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){} 
    

    由于您使用的是全局对象,你可能会想“接近“它在打开另一个连接之前。


编辑

有些浏览器(?也许火狐本身)不办理非 “文本/ 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); 
} 
+0

感谢您的输入!我做了改变。但我仍然有同样的问题。 IE8给我返回查询字符串。但FF只是打开一个空白的消息框。你知道这可能来自哪里吗? – samoncode

+0

@ Sammy46那么现在IE在每个按键上都获得文本吗? – Passerby

+0

是的!它实际上是获取每个键上的文字。但我真的很想知道当我使用FF(版本10.0.7,如果这可以帮助?) – samoncode