Ankündigung

Einklappen
Keine Ankündigung bisher.

[Gelöst] Daten weitergabe im Script bzw. von AJAX

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Gelöst] Daten weitergabe im Script bzw. von AJAX

    Hallo Leute ich mal wieder was fragen.

    Ich habe nun das Script mir gebaut:

    Code:
    function TD() {
        $('td').each(function(event) {
    
            if ($(this).closest("td").attr('Content_Editable') === 'true') {
                $(this).mouseover(function() {
                    $(this).css("cursor", "pointer");
                })
    
                let td_old = '';
                let index = '';
                let data_alt = '';
                let table_th = '';
                let text_old = '';
                let table_id = '';
    
                $(this).dblclick(function() {
                    if ($(this).children("input").length > 0) {
                        return false;
                    }
    
                    td_old = $(this);
                    index = td_old.parent().children().index(this);
    
                    text_alt = td_old.closest("td").text();
                    table_th = td_old.parents('tbody').prev().find('tr').children(':eq(' + index + ')').attr('id');
                    text_old = td_old.text();
                    table_id = td_old.closest("tr").find("td:eq(0)").text();
    
                    td_old.html("");
    
                    if ($(this).closest("td").attr('Input') === 'true') {
                        input_new = $("<input type='text' />");
    
                        input_new
                            .width(td_old.width())
                            .height(td_old.height())
                            .css({
                                border: "1px solid #000000",
                                fontSize: "17px"
                            })
                            .val(text_old)
                            .appendTo(td_old)
                            .trigger("focus")
                            .trigger("select");
                    }
    
                    function Ajax_Data(data) {
                        alert(data);
                        return data;
                    }
    
                    console.log(data);
    
                    if ($(this).closest("td").attr('Select') === 'true') {
    
                        getData();
    
                        console.log(options);
    
    
                        input_new = $('<select name="13">' + options + '</select>');
    
                        input_new
                            .width(td_old.width())
                            .height(td_old.height())
                            .css({
                                border: "1px solid #000000",
                                fontSize: "17px"
                            })
                            .appendTo(td_old)
    
                    }
    
                    // on Leave
                    input_new.blur(function() {
                        if (text_alt !== $(this).val()) {
                            Write($(this).val());
    
                        } else {
    
                            td_old.html(text_old);
                        }
                    });
    
                    // press ENTER-key
                    input_new.keyup(function(event) {
                        if (13 === event.which) {
                            if (text_alt !== $(this).val()) {
                                Write($(this).val());
    
                            } else {
                                td_old.html(text_old);
                            }
                        }
    
                        // press ESC-key
                        else if (27 === event.which) {
                            td_old.html(text_old);
                        }
                    });
    
                    function Write(text_new) {
                        $.ajax({
                            type: "POST",
                            url: "index.php?usw...",
                            dataType: 'json',
                            data: {
                                "TOKEN": $("input[name=CSRF_TOKEN]").val(),
                                "TABLE_ID": table_id,
                                "TEXT_OLD": text_old,
                                "TEXT_NEW": text_new,
                                "TABLE_HEAD": table_th
                            },
                            success: function(Response) {
                                if (Response === "1") {
                                    td_old.html(text_new);
    
                                } else {
    
                                    Info_Box();
                                }
                            }
                        });
                    }
    
                    function getData() {
                        $.ajax({
                            dataType: 'json',
                            data: {
                                "TOKEN": $("input[name=CSRF_TOKEN]").val()
                            },
                            type: "POST",
                            url: 'index.php?usw...',
                            success: Ajax_Data
                        })
                    }
                });
            }
        });
    }
    Damit ich nicht die Hälfte von dem Code doppelt habe müsste ich irgendwie an die Daten aus der Ajax abfrage bekommen.

    Vereinfacht gesagt brache ich so was:

    Code:
    function Oben()
    {
        code .....
    
        function innen(data)
        {
            alert(data);
        }
    
        console.log(data);
    
        code .....
    }
    Ich habe nur keine ahnung wie das gehen soll.

    Kann mir bitte jemand einen Tipp geben.

    Gruß
    René

  • #2
    Ich bin nicht komplett in die Logik deines Skriptes eingestiegen. Verstehe ich das richtig, dass Du die Antwort von beiden Anfragen mit Ajax brauchst, um eine Aktion durchzuführen?
    Oder, wenn ich mir das zweite Schnipsel anschaue: Du willst außerhalb der Funktion innen auf das Ergebnis data der Anfrage innerhalb dieser Funktion zugreifen?

    Kommentar


    • #3
      Nein mir reicht eine Anfrage.

      Das was du meinst war nur ein Test.

      Und deinen 2ten Teil verstehe ich nicht.

      Mein problem ist wenn ich alles in succses reinmache von AJAX muss ich die on Leave Enter und Write auch nochmal da reinmachen.

      Oder in eine andere Funktion. Ich komme so nicht mehr an die Leave Enter und Write.

      Und ich will da so so was für bauen mit Radio also hätte ich dann 3 mal Leave Enter und Write.

      Kommentar


      • #4
        Neuer Versuch, es zu verstehen: Du registrierst Eventlistener für blur() und das Drücken von Enter. Jetzt lädst Du mit Ajax weitere Elemente nach und möchtest für diese neuen Elemente ebenfalls die gleichen Eventlistener registrieren. Und Du möchtest vermeiden, dass Du den Code dafür einfach verdoppelst?

        Kommentar


        • #5

          Nein. Ich versuche bei einem Doppelklick das vorhandene TD gegen ein Select zu tauschen. Für das Select brauche ich die Options aus der DB dafür ist am Ende das AJAX. Mein Problem ist wenn ich Code Teil
          Code:
           if ($(this).closest("td").attr('Select') === 'true') {
          Versuche in eine Funktion zu packen erreiche ich
          Code:
          input_new.keyup
          und die anderen nicht mehr.
          Also suche ich einen Weg die Antwort aus der Letzten Ajax weiter oben in der übergeordneten funktion
          Code:
           $('td').each(function(event) {
          zu verwenden.

          Kommentar


          • #6
            Tut mir Leid, ich kann dir nicht folgen. Vielleicht jemand anders ...

            Kommentar


            • #7
              Ich verstehe das so.
              Er möchte das ergebniss vom Ajax Request aus der
              function getData() im ganzen
              $('td').each(function(event) { erreichbar haben. Wenn each den nächsten durchlauf hat soll der Inhalt aus den ajax Request ab Zeile 3 lesbar sein. ??
              Ich mach keine Rechtschreibfehler - ich schreib Freestyle!
              Erreichbar in mein Javascript-Forum und in Facebook-Chat

              Kommentar


              • #8
                Genau so ist es.

                am Besten wäre es wenn ich die Daten bekomme wenn ich getData(); aufrufe.

                Ich brache sie ja nur im falle eines Selectes.

                Kommentar


                • #9
                  Der Code, der Zugriff auf den Ajax Response haben soll, muss im Success Callback vom Ajax Request stehen.
                  Da das ganze asyncron abläuft, kannst du nicht einfach mit return den Reponse zurückgeben.
                  sorry, shift-taste kaputt

                  Kommentar


                  • #10
                    Ok Danke für die Hilfe.

                    Kommentar


                    • #11
                      Renede Heißt das, dass Du das Problem lösen konntest?

                      Kommentar


                      • #12
                        Ja.

                        Wenn es nicht so geht wie ich wollte musste ich mir ja was neues einfallen lassen.

                        Ic habe Enter und co in eigene Functionen gemacht und rufe sie nun aus der Ajax auf.

                        Kommentar


                        • #13
                          Das ist sicher eine gute Lösung.

                          Kommentar

                          Lädt...
                          X