Antworten auf deine Fragen:
Neues Thema erstellen

AJAX Anfragen werden nicht verwertet

ElementZ

Nicht mehr ganz neu hier

Hallo beisammen,
ich habe mal wieder ein Problem. Ich möchte eine kleine Administrationsseite für Blogeinträge machen. Das habe ich so gelöst, dass ich mir über PHP eine Tabelle ausgeben lasse, wo die Blogeinträge untereinander weg eingetragen sind. Dazu habe ich Links eingebaut, mit denen man Löschen und Bearbeiten soll.
Das mache ich so:
Code:
<a href=\"javascript:sendDelete($id);\">Löschen</a>
<a href=\"javascript:createUpdate($id)\">Bearbeiten</a>

Funktioniert auch prima. Beim klick auf diese Links, sende ich per JS eine AJAX-Anfrage an den Server, der diese dann weiter verarbeitet. Das funktioniert auch super so weit. Mein Problem liegt jetzt bei folgendem: Ich habe ein Popupfenster, indem ein Formular ist, womit man den Inhalt eines Blogeintrags ändern kann. Der vorhere Inhalt wird durch eine AJAX-Anfrage reingeladen, das funktioniert. Wenn ich das Formular nun abschicke, soll er eine weitere Anfrage versenden, womit ich die Daten dann an den Server liefere, der dann die Datenbankeinträge updatet. Das funktioniert bei mir in Dreamweaver in der Live-Vorschau auch sehr gut. Bei Chrome nicht. Es ist egal, ob ich über POST oder GET die Werte übermittele, unter Chrome bekomme ich nicht einmal Rückmeldung, ob die Anfrage vom Server angenommen wurde. Da ich bei der Anfrage mehrere Werte übermitteln muss, habe ich irgendwie das Gefühl, dass es daran liegt, aber dann dürfte es in anderen Browsern auch nicht klappen.

Hier mal mein Script zum Erstellen des Bearbeitungsformulars und das Füllen mit den vorherigen Werten. (funktioniert):
Code:
function createUpdate(id) {
    var titel = document.getElementById('titel');
    var text = document.getElementById('text');
    var hide = document.getElementById('hide');
    document.getElementById("hover").style.display = "block";
    req = getRequest();
    if(req) {
        req.onreadystatechange = function() {
            if(req.readyState == 4 && req.status == 200) {
            var str = req.responseText;
            var inhalt = str.split("(((())))");
            titel.value = inhalt[0];
            text.value = inhalt[1];
            hide.value = id;
            }
        }
        req.open("get", "update.php?id="+id, true);
        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        req.send(null);
    }
}

Und nun das Skript, was die Daten dann abschickt:
Code:
function sendUpdate() {
        var req = getRequest();
        if(req) {
            var hide = document.getElementById('hide');
            var titel = document.getElementById('titel');
            var text = document.getElementById('text');
            req.onreadystatechange = function() {
                if(req.readyState == 4 && req.status == 200) {
                    alert(req.responseText);
                }
            }
            req.open("post", "update.php", true);
            req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            req.send('id='+hide.value+'&titel='+titel.value+'&text="+text.value);
        }
}

Ich speicher die ID des Eintrags in einem Hiddenfeld, das funktioniert, daran liegt es nicht. Ich habe auch bereits versucht, die Werte anhand "encodeURIComponent()" zu bearbeiten und die "&"-Zeichen zwischen den POST-Werten auch schon zu "&amp;" geändert, bringt alles nichts.

Hier nochmal das dazu passende Serverscript:
Code:
<?
include("config.inc.php");
if(isset($_POST['id'])) {
    if(isset($_POST['titel']) && isset($_POST['text'])) {
        $id = $_POST['id'];
        $titel = $_POST['titel'];
        $text = $_POST['text'];
        echo "$id, $titel, $text";
        /*
        $con = mysqli_connect($host, $user, $password, $database);
        $befehl = "UPDATE `$table` SET title='$titel', article='$text' WHERE id=$id";
        mysqli_query($con, $befehl);
        mysqli_close($con);
        echo "ERFOLGREICH!";*/
    } else {
    $id = $_POST['id'];
    $connection = mysqli_connect($host, $user, $password, $database) or exit("Fehler beim Verbinden mit der Datenbank.");
    $befehllesen = "SELECT `title`, `article` FROM `$table` WHERE id=$id";
    $query = mysqli_query($connection, $befehllesen);
    $data = mysqli_fetch_object($query);
    $vtitel = $data -> title;
    $vtext = $data -> article;
    mysqli_close($connection);
    echo "$vtitel (((()))) $vtext";
    }
} else{                  
    echo "Es wurde kein zu bearbeitender Beitrag ausgewählt.";
}
?>
Bis zu der Ausgabe der 3 zu übergebenden Werte komme ich in Chrome gar nicht, IE macht das problemlos.

Ich würde mich riesig freuen, wenn mir jemand helfen könnte :)

Dankeschön und einen schönen Abend wünsche ich

MfG
ElementZ
 

ElementZ

Nicht mehr ganz neu hier

Ich habe es gerade ausprobiert, es funktioniert anscheinend nur bei mir im Dreamweaver, der IE benutzt. Im Firefox funktioniert es auch nicht. Die Firefoxkonsole sagt folgendes:
[08:20:03.808] Die Zeichenkodierungs-Deklaration des HTML-Dokuments wurde beim Vorverarbeiten der ersten 1024 Zeichen der Datei nicht gefunden. Bei der Ansicht in einem anders konfigurierten Browser wird diese Seite automatisch neu geladen. Die Kodierungs-Deklaration muss in die ersten 1024 Zeichen der Datei verschoben werden.
 

fakerer

Aktives Mitglied

so ein Aufruf ist mir eigentlich noch nie wo bewusst aufgefallen, also im href.
Hast du es schon mal mit einem onclick() event versucht? Oder spricht da was dagegen?

Wird dein $id Parameter im view richtig ersetzt?
 

JPS

Nicht mehr ganz neu hier

Warum machst Du um das Update zu starten überhaupt einen Request, wenn Du doch eigentlich die Daten, die es zu bearbeiten gilt doch genau oben drüber stehen hast?
 

afr0kalypse

Allwissendes Karmameerschweinchen!

Poste mal dein getRequest();
Und pack mal in den sendUpdate nen else-Zweig rein
HTML:
function sendUpdate() {
        var req = getRequest();
        if(req) {
               ........
        } else { alert('req ist false'); }
 

ElementZ

Nicht mehr ganz neu hier

Code:
function getRequest() {
    var httpReq = null;
    if(window.XMLHttpRequest) {
        httpReq = new XMLHttpRequest();
    } else if(typeof ActiveXObject != "undefined") {
        httpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    return httpReq;
}

Das ist mein getRequest(), funktioniert soweit, sonst würden ja alle anderen Anfragen auch nicht funktionieren.

so ein Aufruf ist mir eigentlich noch nie wo bewusst aufgefallen, also im href.
Hast du es schon mal mit einem onclick() event versucht? Oder spricht da was dagegen?

Wird dein $id Parameter im view richtig ersetzt?

Eigentlich spricht da gar nichts gegen, unterscheidet sich aber im Ergebnis nicht. HAbe ich auch mal durchprobiert, daran liegt es nicht. Und ja, der Parameter wird richtig übergeben.

Warum machst Du um das Update zu starten überhaupt einen Request, wenn Du doch eigentlich die Daten, die es zu bearbeiten gilt doch genau oben drüber stehen hast?

Ja ne klar, brauche ich nicht extra herunterladen, wenn es bereits in meiner Tabelle steht, aber darum geht es ja eigentlich gar nicht, sondern darum, dass die veränderten Daten nicht verarbeitet werden.

Poste mal dein getRequest();
Und pack mal in den sendUpdate nen else-Zweig rein
HTML:
function sendUpdate() {
        var req = getRequest();
        if(req) {
               ........
        } else { alert('req ist false'); }

getRequest() siehe oben.
HAbe ich, unverändert.

In der Konsole von Chrome ist mir jetzt etwas interessantes aufgefallen.
Und zwar gibt er mit meine Post-Anfrage auf die "update.php" als GET-Anfrage auf die "index.php" aus. Selbstverständlich erfolgreich. Aber das ist mir schon vorher mal aufgefallen, dass hinter der normalen URL das "?" des GET-Strings erschien.

Ist auf jeden Fall höchst merkwürdig und auch die Fehlermeldung aus der Firefoxkonsole bringt mich zum stutzen. Muss ich Übergabewerte besonders codieren oder so etwas, also gibt es dafür Funktionen um das Ganze in die richtige Form zu bringen?
 

ElementZ

Nicht mehr ganz neu hier

Ja, habe das Problem aber bereits behoben. Ist mein eigener Fehler gewesen. Ich habe das Formular durch nen submit abschicken wollen, aber im form-tag method und action nicht angegeben. Irgendwie ging das deshalb nicht. Ich regele das ganze jetzt über einen normalen Button mit onClick. Die AJAX-Anfrage an sich mache ich jetzt auch mit jQuery, das ist viel einfacher und ich kann keine Fehler mit Codierungen oder so machen.

Trotzdem danke an alle, die mir geholfen haben :)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
118.564
Beiträge
1.538.064
Mitglieder
67.487
Neuestes Mitglied
MichaelSEivy
Oben