Javascript-forum
Objekt per Ajax - Druckversion

+- Javascript-forum (https://javascript-forum.de)
+-- Forum: Entwicklung (https://javascript-forum.de/forumdisplay.php?fid=4)
+--- Forum: Javascript (https://javascript-forum.de/forumdisplay.php?fid=6)
+--- Thema: Objekt per Ajax (/showthread.php?tid=2530)



Objekt per Ajax - Rene - 11.08.2023

Hallo Leute,



ich bitte mal um eure Hilfe.



Ich habe mir folgendes zusammengebastelt:

Code:
$(document).ready(function()
{
    $('td.editable').on('click', function(e)
    {
        data = {};
        enter = 0;

        data['Text_Old'] = $(this).text();
        data['id'] = $(this).closest("tr").find("td:eq(0)").text()

        // Enter abfangen
        $('td.editable').keydown(function(event)
        {
            if(event.keyCode == 13)
            {
                enter = enter +1;

                if(enter <= 1)
                {
                    data['Text_New'] = $(this).text();
                    save(data);
                }
                event.preventDefault();
                return false;
            }

            // Escape abfangen
            if (event.keyCode == 27)
            {
                $(this).html(data.Text_Old);
                event.preventDefault();
                return false;
            }
        });
    });

    $('td.editable').on('focusout', function()
    {
        enter = enter+1;

        data['Text_New'] = $(this).text();
        save(data);
    });

    function save(data)
    {
        if (data['Text_Old'] === data['Text_New'])
        {
            return false;
        }
        else
        {
            if (enter <= 1)
            {
                // Formular per AJAX senden
                $.ajax
                ({
                    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
                    type: 'POST',
                    url: 'index.php?GOTO=Test_Controller/Test/',
                    data: data,
                    //dataType: 'json',
                    encode: true,
                    beforeSend: function()
                    {
                        $('td.editable').css("background","#FFF url(loader.gif) no-repeat right");
                    },
                    success: function (data)
                    {
                        console.log(data);

                    },
                    error: function (xhr, ajaxOptions, thrownError)
                    {
                        console.log(xhr.status);
                        console.log(thrownError);
                    },
                    complete: function ()
                    {
                        $('td.editable').delay("slow").removeAttr("style");
                    }
                });
            }
        }
    }
});



Allerding schein es ein Problem mit data = {}
Ich muss zugeben h habe aber keine Ahnung wie ich das ändere.
Wenn ich nun per PHP antworte bekomme ich die Antwort nicht in der Console sondern in einer leeren Seite.

Kann mir dabei einer helfen?

PS:
Das Forum hat beim ersten versuch alles was nach dem Code Block war entfernt.
Nach dem Posten.


RE: Objekt per Ajax - Rene - 11.08.2023

Hat sich erledigt.

Ich hatte die AJAX URL geändert aber FF war der meinug er nutzt die alte.

Ok ich hatte doch nict ganz unrecht es gibt ein Problem mit dem data{}

Ich kann zwar Senden aber bekomme dann in der Konsole den Fehler:

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

Nun erbitte ich doch wieder Hilfe.

Gruß
René


RE: Objekt per Ajax - rzscout - 13.08.2023

Moin,
der Fehler steckt hier ganz offensichtlich das du ein Objekt in JavaScript deklariest hast und du darauf zugreifst als wäre es ein Array. Um auf Properties eines Objekt zugreifen bzw. ändern möchtest, musst du da anders vorgen.

Code:
data.Text_Old = $(this).text();
data.id = $(this).closest("tr").find("td:eq(0)").text();

Meine Empfehlung: verwende kein jQuery, da es Nachteile mit sich bringt.

Viele Grüße

rzscout


RE: Objekt per Ajax - Sempervivum - 13.08.2023

Die Syntax, die Rene verwendet:
Code:
        data['Text_Old'] = $(this).text();
        data['id'] = $(this).closest("tr").find("td:eq(0)").text()
ist vollkommen in Ordnung, wenn auch etwas umständlich, wenn man mit Texkonstanten adressiert.
Vollkommen unverzichtbar ist diese Schreibweise, wenn man mit dem Inhalt einer Variablen adressieren will:
Code:
        const theKey ='Text_Old';
        data[theKey] = $(this).text();

Die Fehlermeldung, die Du, @"Rene", gepostet hast, sagt, dass das Format des JSON ungültig ist. Meistens liegt das daran, dass das PHP-Skript außer dem JSON oder an dessen Stelle noch etwas anderes ausgibt, z. B. eine Fehlermeldung oder eine Ausgabe mit echo, var_dump etc. Überprüfen kannst Du das im Netzwerk-Tab der Entwicklerwerkzeuge deines Browsers, dort findest Du ein Tab "Reponse" wo Du die Antwort vom Server sehen kannst.


RE: Objekt per Ajax - Rene - 13.08.2023

Vielen Dank für die Hilfe.

Nun Läuft es iwie es soll.

Gruß
René


RE: Objekt per Ajax - Sempervivum - 13.08.2023

Was ist denn hier passiert? "Click to edit"?

Huh Huh Huh


RE: Objekt per Ajax - erster - 15.08.2023

Beim defaul Design fehlen hier Beiträge , die Beiträge fast komplett. Beim Standard Design sind sie alle sichtbar