0

次のJavaScript関数は、デバッグ目的で元々そこにあった最後のconfirm()ステートメントがある場合にのみ機能するようです。取り出してみるとdelete_row.phpが動かないようです。また、おそらくヒント/補足として、そこに確認ステートメントがある場合、サファリを除くすべてのブラウザーで動作します...

function deleterow(form) {

    if (!confirm("Are you sure you want to delete?")) return false;

    var queryString = "?ID=";

    for (var i = 0; i < document.myForm.rows.length; i++) {
        if (document.myForm.rows[i].checked) {
            ID = document.myForm.rows[i].value;
            ID = ID.slice(0, -1);
            queryString += ID;
            queryString += "-";
        }
    }
    queryString = queryString.slice(0, -1);

    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }

    var ajaxRequest;  // The variable that makes Ajax possible!
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            var ajaxDisplay = document.getElementById('ajaxDiv');
            ajaxDisplay.innerHTML = ajaxRequest.responseText;
        }
    }

    ajaxRequest.open("GET", "delete_row.php" + queryString, true);
    ajaxRequest.send(null); 
    confirm('Delete successful!');
}

更新は解決しました

次のjsスクリプトの変更により、ajaxRequestのステータスを確認していました

ajaxRequest.onreadystatechange = function(){ // Create a function that will receive data sent from the server
    if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200){
        var ajaxDisplay = document.getElementById('ajaxDiv');
        ajaxDisplay.innerHTML = ajaxRequest.responseText;
    }
    else{
        alert('An error has occurred making the request');
        return false;
    }
}

サーバーから0のステータスが返されていることに気付きました。グーグルで調べてみると、これらの関数を呼び出すボタンを定義する方法にエラーがあることがわかりました。

元のコードは次のとおりです。

<div style='float:left; margin-right:10px;'><input type="submit" onClick="deleterow(document.myForm)" VALUE="Delete ROWs"></div>

修正は次のとおりです。

<div style='float:left; margin-right:10px;'><input type="button" onClick="deleterow(document.myForm)" VALUE="Delete ROWs"></div>

(送信タイプをボタンタイプに変更する必要があります)

4

3 に答える 3

1

delete_row.php doesn't seem to runif(ajaxRequest.readyState == 4){これを確認しましたか、「フォームを使わずに JS を試しましたが、正常に動作しているようです」にアラートを追加できますか? http://jsfiddle.net/6gjy6/ ブラウザで適切な URL を使用して基本的な「GET」リクエストを実行してdelete_row.php" + queryString,みて、AJAX 呼び出しの代わりにサーバーがどのように応答するかを確認しましたか。

これを試して:

var queryString = "?ID=";

for (var i = 0; i < document.myForm.rows.length; i++) {
    if (document.myForm.rows[i].checked) {
        ID = document.myForm.rows[i].value;
        ID = ID.slice(0, -1);
        queryString += ID;
        queryString += "-";
    }
}
queryString = queryString.slice(0, -1);
var ajaxRequest; 

try{
    // Opera 8.0+, Firefox, Safari
    ajaxRequest = new XMLHttpRequest();
} catch (e){
    // Internet Explorer Browsers
    try{
        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try{
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e){
            // Something went wrong
            alert("Your browser broke!");
            return false;
        }
    }
}

// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){
        alert("received: " + ajaxRequest.responseText);
        var ajaxDisplay = document.getElementById('ajaxDiv');
        ajaxDisplay.innerHTML = ajaxRequest.responseText;
    }
}

ajaxRequest.open("GET", "delete_row.php" + queryString, true);
ajaxRequest.send(null); 

</p>

于 2012-06-24T04:50:34.127 に答える
0

あなたのjs putの一番上にいる間、confirm()ステートメントをそこに置いてください

window.alert = null ; 

そして試してみてください

確認させてください

于 2012-06-24T04:18:48.337 に答える
0

onreadystatechangeを呼び出した後にイベントを設定することになっていると確信しています。openそうしないと、ハンドラーがクリアされます。

于 2012-06-24T04:20:30.333 に答える