2

私は誕生日に人々にメールを送信するPHPスクリプトを作成しています。また、プログラム全体のオンとオフを切り替えたり、今日彼の誕生日を祝っている人を監視したり、メールを送信できなかったかどうかを確認したりできる小さなWebインターフェイスも必要です。サーバー上のphpは機能していますが、htmlとjavascriptのインターフェイスで苦労しています。具体的には、サーバーから情報を取得するAjaxリクエストです。Firefox、Chrome、Operaでは正常に動作しますが、InternetExplorer8ではサーバーからの応答がありません。readyStateは4に切り替わりますが、ステータスは0のままで、responseTextは空です。

グーグルした後、多くの人がJQueryにアドバイスしていることがわかりましたが、どのブラウザーでもそれを機能させることができませんでした。とても簡単に思えたので、もっと知りたいのですが、今のところ、JQueryなしでこれを行う方法を知りたいと思います。

編集

コメントからの質問に応じて、ifステートメントとelseステートメントを切り替えても同じ結果が得られます。接続を「開く」から「閉じる」に変更するのと同様に、ちなみに、接続は閉じているはずです。なぜ変更したのか思い出せません。おそらく、欲求不満から何かを試しているだけです。最後に、サーバー側のphpコードを追加しました。'action'がswitchonoffの場合、サーバーは文字列データを送り返します。actionがclearlogの場合はテキストなしのヘッダーのみ、actionが初期化されている場合はjsonarrayを返します。リクエストが何であれ、サーバーのHTTPステータスは常に0です。

<script type="text/javascript">
function loadXMLDoc(action) {
    var parameters = "action="+encodeURI(action);
    var xmlhttp;
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("POST",'http://mailer.test/App/postscript.php',true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", parameters.length); 
    xmlhttp.setRequestHeader("Connection", "open");
    xmlhttp.send(parameters);

    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status==200) {
            if(action == 'switchonoff'){
                document.getElementById("onoffbutton").innerHTML=xmlhttp.responseText;
            } else if(action == 'initialize'){
                var response = JSON.parse(xmlhttp.responseText);
                document.getElementById("onoffbutton").innerHTML=response['onoff'];
                document.getElementById("birthdays").innerHTML=response['birthdays'];
                document.getElementById("errors").innerHTML=response['errors'];
            } else if(action == 'clearlog'){
                document.getElementById("errors").innerHTML="";
            }
        }
    }
}

window.onload = function() {
    loadXMLDoc('initialize');
}
</script>

編集、これがphpスクリプトです

<?php 

include "settingschanger.php";
include "customercsv.php";

if (!isset($_POST['action'])) {
$_POST['action'] = 'dummy';
}

$post = $_POST['action'];

if(strcmp($post, "initialize") == 0) {
$settings = new SettingsChanger();
$onoff = $settings->getOnOff();
$csv = new CustomerCSV();
$csv->openFile((__DIR__).CustomerCSV::FILENAME);
$todaysbirthdays = $csv->getTodaysBirthdays();
$birthdays = "";
foreach ($todaysbirthdays as $row) {
    $birthday = "";
    foreach ($row as $data) {
        $birthday .= $data . " ";
    }
    $birthdays .= $birthday . "<br />";
}
$errorLogArray = $settings->getErrorLog();
$errors = "";
foreach($errorLogArray as $line) {
    $errors .= $line . "<br />";
}
$result = json_encode(array('onoff'=>$onoff, 'birthdays'=>$birthdays, 'errors'=>$errors));

header("HTTP/1.1 200 OK");
print $result;
}
if(strcmp($post, "switchonoff") == 0) {
$settings = new SettingsChanger();
$result = $settings->changeOnOff();

header("HTTP/1.1 200 OK");
print $result;
}
if(strcmp($post, "clearlog") == 0) {
$settings = new SettingsChanger();
$settings->clearLog();

header("HTTP/1.1 200 OK");
}
?>
4

3 に答える 3

0

古いバージョンの IE (v9 未満) では、返されたコンテンツが空になるという問題がありましたが、成功関数がトリガーされました。

その後、HTML5 タグを使用していることがわかりました。IE では、何らかの奇妙な理由で、AJAX 要求を介した HTML5 出力が機能せず、空の DOM または DOM が返されませんでした。

「 jquery .load() not inserting data in ie8 and below 」の最後の編集を見てください。

于 2012-06-19T13:20:29.467 に答える
0

さて、私はサイトを機能させました。post リクエストの代わりに get リクエストを使用するようになりましたが、うまくいくようです。完璧ではないので、投稿リクエストでそれを行う方法を探し続けますが、今のところうまくいきます.

于 2012-06-25T20:45:47.203 に答える
0

xmlhttp.send(parameters);afterxmlhttp.onreadystatechange文で試してみてください。

于 2012-06-19T13:15:02.947 に答える