3

IE 以外のものを自分のマシンにダウンロードすることを拒否する親のために、機能的なページを作成しようとしています。とにかく、それはリストであり、データベースによってバックアップされた AJAX の切り替え可能なボタンがいくつか必要でした。

何が起きているのかわかりませんが、以下が呼び出され、firefox と chrome の両方で正常に受信されます。IE(どのバージョンでも)で何をしても動作しません。onreadystatechange 関数は、本来あるべき "off" または "on" ではなく、常に "1" を受け取って報告します。1 と 0 を送信しようとしただけだったので、これはもともと私を投げました。

とにかく、IE は実際には値をコミットしないので、PHP ページにアクセスして応答を受信しようとすると、何か問題があると思います。不謹慎で申し訳ありませんが、何が原因でしょうか?

残念ながら、この Web ページには人に見られたくない機密情報が含まれているため、以下のセンサー コードを使用します。

ジャバスクリプト関数:

function toggleResponded(i) {
    var respondedHttp;  
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        respondedHttp=new XMLHttpRequest();
    }   else    {// code for IE6, IE5
        respondedHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    alert("toggling responded for element: " + i);

    respondedHttp.onreadystatechange = function() {         
        if(respondedHttp.readyState==4 && respondedHttp.status==200) {
            var state = respondedHttp.responseText;
            alert("Recieved: " + state);
            if(state == "off") {
                document.getElementById("respond"+i).className = "inLineOff";
                document.getElementById("respond"+i).innerHTML = "No Response Yet";
                document.getElementById("attend"+i).style.display="none";
                document.getElementById("quantityCell"+i).style.display="none";
            } else if(state == "on") {
                document.getElementById("respond"+i).className = "inLineOn";
                document.getElementById("respond"+i).innerHTML = "Responded";
                document.getElementById("attend"+i).style.display="inline";
                if(document.getElementById("attend"+i).innerHTML == "Attending") {
                    document.getElementById("quantityCell"+i).style.display="table-cell";
                }
            } else {
                alert("error: " + state);
            }
        }
    }

    var name = peeps.people[i];

    alert("toggling for: " + name); 
    alert("toggling as: " + encodeURIComponent(name));

    var ops = "./quer.php?";    
    ops += "op=toggleResponded";
    ops += "&name=" + encodeURIComponent(name);

    alert("going to: " + ops);

    respondedHttp.open("GET", ops, true);
    respondedHttp.send();
}

PHP:

if(isset($_GET["op"])) {
    switch($_GET["op"]) {
        case "toggleResponded":
            $name = mysql_real_escape_string(rawurldecode($_GET["name"]));
            $database->executeStatement("SELECT * FROM table WHERE nameField='$name'");
            $info = $database->nextResult();
            $nval = 0;
            if($info["Responded"] == 0) {
                $nval = 1;
            }
            $database->executeStatement("UPDATE table SET field='$nval' WHERE nameField='$name'");
            if($nval == 1) {
                echo "on";
            } else {
                echo "off";
            }           
        break;
4

2 に答える 2

4

IE は ajax を積極的にキャッシュします。最初は 1 と 0 を返していたので、おそらくキャッシュされたデータです。リクエストしている URL に現在の日付を追加します。

var d = new Date();
ops = ops + '&nocache=' + d.getTime();
于 2012-05-14T16:21:15.480 に答える