1

クエリ文字列を要求元のajaxオブジェクトに戻すために、c++を使用してcgi-scriptを作成しました。また、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は何もしません。

4

2 に答える 2

2
  1. ハンドラーで使用する必要はありません。それだけjavascript:で十分です。on___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){}
    

    グローバル オブジェクトを使用しているため、別の接続を開く前に「閉じる」ことが必要な場合があります。


編集

一部のブラウザー (おそらく 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) を介して Web ページを開く必要があります。これは許可されていません。

于 2012-10-15T15:35:10.417 に答える