javascript & ajax werken alleen met confirm ()

de volgende JavaScript-functie lijkt alleen te werken als ik de uiteindelijke confirm() -instructie heb die ik daar oorspronkelijk had voor het opsporen van fouten. wanneer ik het weghaal, schijnt delete_row.php niet te lopen. ook, en misschien als een hint/side-note, wanneer ik de bevestigende verklaring daarin heb, werkt het op alle browsers behalve op safari ...

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!');
}

UPDATE OPGELOST

ik controleerde de status van de ajaxRequest door de volgende js-scriptwijziging

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;
    }
}

en merkte op dat ik een status kreeg van 0 terug van de server. een beetje rond googlen hielp me beseffen dat de fout loog in hoe ik de knoppen definieerde die deze functies aanriepen.

originele code was:

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

oplossing is:

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

(verzendtype moet worden gewijzigd in knoptype)

0
Ook een extra } aan het einde :/
toegevoegd de auteur Derek 朕會功夫, de bron
toegevoegd de auteur mymotherland, de bron
Waarom zijn uw offertes ontsnapt?
toegevoegd de auteur Matthew Flaschen, de bron
AJAX is asynchroon, weet je. De bevestiging() -aanroep vindt meestal plaats voordat het antwoord op de HTTP-aanvraag is ontvangen.
toegevoegd de auteur Pointy, de bron
ziet eruit als de extra} kwam van jou Derek: /
toegevoegd de auteur Constantino, de bron

3 antwoord

delete_row.php doesn't seem to run have you verified this, can you add an alert to if(ajaxRequest.readyState == 4){ I tried your JS though without the form stuff and it seems to work fine, http://jsfiddle.net/6gjy6/ Do you get any JS errors in Google Chromes console? Have you tried doing a basic "GET" request on the browser with the appripriate url ie delete_row.php" + queryString, and seeing how the server responds instead of the AJAX call.

probeer dit:

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); 

1
toegevoegd
@ user1153897 wat ik bedoelde was om de URL regelmatig in uw browser te proberen, typ gewoon in http: //localhost/delete_row.php? ID = 123012-123-1 of iets in die zin om te zien hoe de server reageert.
toegevoegd de auteur Samy Vilar, de bron
@ user1153897 . het geeft een regel html uit met een link erin. wanneer deze wordt opgeroepen, zie ik deze regel html snel verschijnen en dan verdwijnt. interessant Ik denk dat het gebeurt dat ajaxDisplay.innerHTML = ajaxRequest.responseText blijft vervangen wat u eerder hebt ingevoerd if (ajaxRequest.responseText) ajaxDisplay.innerHTML + = '
' + ajaxRequest.responseText
toegevoegd de auteur Samy Vilar, de bron
@ user1153897 u zou ook enkele variabelen kunnen overschrijven, als u de volledige code kunt posten ...
toegevoegd de auteur Samy Vilar, de bron
ik krijg geen JS-fouten in de Google Chrome-console .... hoe kan ik een basis "GET" doen? ik ben bang dat ik niet erg bekend ben met JS (vandaar dat ik deze vraag stelde) en dat de code die ik schreef, via online onderzoek was gehackt. Ik waardeer je hulp!
toegevoegd de auteur Constantino, de bron
ik heb geprobeerd localhost/delete_row.php? ID = 123 en het werkt prima. ik heb je bewerking geprobeerd en het probleem wordt niet opgelost. misschien als meer informatie over het probleem, ik heb een andere js-functie die precies hetzelfde is maar in plaats daarvan call_sheet.php aanroept. het geeft een regel html uit met een link erin. wanneer ik wordt aangeroepen, zie ik deze regel html snel verschijnen en verdwijnt deze vervolgens. Wat denk jij?
toegevoegd de auteur Constantino, de bron

Ik ben er tamelijk zeker van dat je de onreadystatechange -gebeurtenis moet instellen na het aanroepen van open , anders wordt de handler gewist.

0
toegevoegd
ik verhuisde de ajaxRequest.open-oproep boven de lijn met ajaxRequest.onreadystatechange (is dat wat je bedoelde?) en het probleem is niet opgelost
toegevoegd de auteur Constantino, de bron

bewaar je confirm() -instructie daar terwijl je bovenaan staat

window.alert = null ; 

en probeer

Laat me eens kijken

0
toegevoegd
Wat doet dit om te helpen?
toegevoegd de auteur Niet the Dark Absol, de bron
nee, lijkt het niet te repareren
toegevoegd de auteur Constantino, de bron