johannes g: Jquery

Hallo liebe Community,

ich komm grad einfach nicht voran und finde den Fehler nicht...
und zwar möchte ich nach einen per jquery aufgerufenen submit Befehl der die Daten an einen Iframe sendet eine neue Seite laden (kein iframe).

Soweit klappt schon Mal alles ganz gut.

<script type="text/javascript">  
  
  
$('#framm').load('drupal/node/add/s', function() {  
  
	  
	  
	 $('form#s-node-form').attr('target', 'my_iframe').submit();  
	  
	  
	  
	});  
	  
  
  
  
</script>

Wenn ich jetzt allerdings eine Funktion hinzufüge funktioniert der submit und der zu testzwecken eingefügte scrolldown Befehl nicht mehr.

<script type="text/javascript">  
  
  
$('#framm').load('drupal/node/add/s', function() {  
  
	  
	  
	 $('form#s-node-form').attr('target', 'my_iframe').submit(function() {  
  scrollDown();  
});  
	  
	  
	  
	});  
	  
  
  
  
</script>
  1. Meine Herren!

    $('form#s-node-form').attr('target', 'my_iframe').submit(function() {
       scrollDown();
    });

      
    Verstehe ich das richtig, dass du im iframe selbst nach abschicken des Formulars nach ganz unten scrollen möchtest?  
      
    Naja, wenn du der submit-Methode eine Callback-Funktion übergibts, so wird diese aufgerufen bevor das Formular tatsächlich an den Server übermittelt wird. Du möchtest aber erst scrollen NACHDEM du Antwort vom Server erhalten hast:  
      
    `$('form#s-node-form').attr('target', 'my_iframe').submit().load( scrollDown );`{:.language-javascript}  
      
    PS: Es ist nicht nötig die Funktion scrollDown nochmal in eine Funktion zu stecken, die ihrerseits wieder nichts anderes macht, als die scrollDown-Funktion aufzurufen.  
    
    -- 
    “All right, then, I'll go to hell.” – Huck Finn
    
    1. Verstehe ich das richtig, dass du im iframe selbst nach abschicken des Formulars nach ganz unten scrollen möchtest?

      und der zu testzwecken eingefügte scrolldown Befehl nicht mehr.

      nein der war nur grad drinnen zum testen...

        
       $('form#s-node-form').attr('target', 'my_iframe').submit(function callback() {  
           window.location = 'http://xxx.de/a.php?id=<?php echo $id+1; ?>';  
      });  
      
      

      das ist der eigentliche zweck aber ich versuchs mal mit dem .load danke.

      1. Meine Herren!

        $('form#s-node-form').attr('target', 'my_iframe').submit(function callback() {
             window.location = 'http://xxx.de/a.php?id=<?php echo $id+1; ?>';
        });

        
        >   
        > das ist der eigentliche zweck aber ich versuchs mal mit dem .load danke.  
          
        Das ist eine völlig andere Ausgangssituation, die völlig andere Umstände mit sich bringt.  
          
        Erkläre doch nochmal langsam und detailliert was du eigentlich vor hast. Da darf der Text auch mal was länger werden, die Leute hier sind nicht lesefaul, aber bei unzulänglichen Informationen kann schon mal einer mürrisch werden ;)  
          
        PS: Wo würde ich hinkommen, wenn ich der Adresse http://xxx.de folgte? Ich glaube das ist keine Seite, die ich auf der Arbeit geöffnet habe möchte :P Für solche Beispiele gibt es die extra vorgesehene Domain: example.com  
        
        -- 
        “All right, then, I'll go to hell.” – Huck Finn
        
        1. Erkläre doch nochmal langsam und detailliert was du eigentlich vor hast. Da darf der Text auch mal was länger werden, die Leute hier sind nicht lesefaul, aber bei unzulänglichen Informationen kann schon mal einer mürrisch werden ;)

          Also mein vorhaben ist die mysql datenbank von cms drupal mit inhalt zu füllen(20000 einträge).

          Da die struktur hinter drupal ziemlich komplieziert und für mich sehr ungewohnt ist man aber in Frontend jedes "sqlfeld" detailliert gestallten kann, dachte ich mir ich fülle das Frontend formular einfach mittels jquery und schicke es ab.

          Dazu entnehme ich der url der a.php eine id(?id=1) womit ich mir dann aus der api (mit den 20000 einträgen) den eintrag mit der selben id raussuche.

          dann lade ich die drupalseite zum hinzufügen von einträgen(drupal/node/add/s) mittels jquery .load in ein div . Den inhalt des formulars fülle ich dann per
          $("#edit-title").val("<?php echo $data->Game->GameTitle; ?>");

          Danach wird das formular an einen iframe(auch drupal/node/add/s)gesendet um die daten zu speichern.
          Warum iframe? damit die variable id erhalten bleibt.

          soweit klappt auch alles.
           jetzt zum problem wenn ich versuche die submit funktion mit einer weiterleitung auf (?id=2 (immer + 1)) zu erweiten funktioniert nix mehr. Dies soll natürlich erst geschehen wen der iframe fertig geladen ist.

          	 $('form#s-node-form').attr('target', 'my_iframe').submit().load(function callback() {  
               window.location = 'http://example.com/a.php?id=<?php echo $id+1; ?>';  
          });
          

          ich hoffe jetzt kann mir jemand weiterhelfen :)

          1. Meine Herren!

            Da die struktur hinter drupal ziemlich komplieziert und für mich sehr ungewohnt ist man aber in Frontend jedes "sqlfeld" detailliert gestallten kann, dachte ich mir ich fülle das Frontend formular einfach mittels jquery und schicke es ab.

            Du sitzt da also gemütlich in deinem Ohrensessel vorm Kamin, versuchst einen Faden in ein Nadelöhr zu fädeln und ärgerst dich darüber dass das so schwierig sein kann. Dann verlässt du wutentbrannt dein warmes Heim, chaterst einen alten Fischkutter fährst raus auf die stürmische Nordsee, tauschst den Faden gegen ein Tau und versuchst nun mit dem Schiffskran das Tau bei höchstem Wellengang einzufädeln während um dich herum die Marine ein Manöver probt und auf Spatzen schießt.

            Ganz ehrlich vergiss diesen irre komplizierten Ansatz, das geht mit Sicherheit viel viel einfacher.

            Woher stammen den die Daten, die du importieren möchtest, wie sieht ein Beispiel-Datensatz aus?
            Und wie sieht die beispielhafte Struktur des Ziels aus, wo der Datensatz hin soll?

            --
            “All right, then, I'll go to hell.” – Huck Finn
            1. Du sitzt da also gemütlich in deinem Ohrensessel vorm Kamin, versuchst einen Faden in ein Nadelöhr zu fädeln und ärgerst dich darüber dass das so schwierig sein kann. Dann verlässt du wutentbrannt dein warmes Heim, chaterst einen alten Fischkutter fährst raus auf die stürmische Nordsee, tauschst den Faden gegen ein Tau und versuchst nun mit dem Schiffskran das Tau bei höchstem Wellengang einzufädeln während um dich herum die Marine ein Manöver probt und auf Spatzen schießt.

              Ganz ehrlich vergiss diesen irre komplizierten Ansatz, das geht mit Sicherheit viel viel einfacher.

              Woher stammen den die Daten, die du importieren möchtest, wie sieht ein Beispiel-Datensatz aus?
              Und wie sieht die beispielhafte Struktur des Ziels aus, wo der Datensatz hin soll?

              Also zu deiner Geschichte...

              So war es wirklich.

              Ich sass gemütlich in meinen Chefsessel  und dachte mir das es langsam zeit ist meine Webseite mit Daten zu füllen also schnell einen blick in die mysql werfen und siehe da die Struktur ist ja ganz anders als erwartet.

              Also nicht wie gewohnt:

              Inhalt des typs bla
              ID |titel|beschreibung|noch ein Wert|hinzugefügt am|

              Sondern:

              Feld titel
              |ID|INHALT|irgend eine Verknüpfte ID|noch eine verknüpfte ID|undnoch eine verknüpfte ID|

              Feld beschreibung
              |ID|INHALT|irgend eine Verknüpfte ID|noch eine verknüpfte ID|undnoch eine verknüpfte ID|

              Nachdem ich nach c.a 2 Minuten begriffen hatte das es ein enormer Zeitaufwand (schätze 3-4 stunden) wäre herauszufinden wie die einzelnen Felder mit einander verknüpft sind und dieses dann noch per mysql befehl auszuführen,(nochmal etliche stunden arbeit)
              entschloss ich mich kurzerhand dies auf die im letzten post beschriebene weise zu erledigen.
              (Da es eine einmal Aktion ist ist mir der Ressourcen verbrauch ziemlich egal)

              Also tippte ich munter den Code in die tasten und siehe da nach Nichtmal einer halben stunde funktioniert schon das automatische eintragen eines einzelnen Eintrags.
              (die Funktion zum auswerten der API hatte ich schon einige Wochen zuvor geschrieben)

              Erstaunt und frohlockend das dies alles so schnell geklappt hat lehnte ich mich zurück und tippte noch die letzte Funktion zum eintragen aller Einträge ein.

              Von:

                
               $('form#s-node-form').attr('target', 'my_iframe').submit()  
              
              

              Zu:

                
               $('form#s-node-form').attr('target', 'my_iframe').submit(function callback() {  
                   window.location = 'http://xxx.de/a.php?id=<?php echo $id+1; ?>';  
              });  
                
              
              

              Als ich nun die URL http://excample.de/a.php?id=1 aufrief kam der schock, die submit Funktion und die weiterleitungs Funktion funktionierten nicht mehr ohne das ich ein Fehler geschweige denn eine Lösung finden konnte.

              In meiner Verzweiflung  wendete ich mich an die Seite selfhtml.de wo ich schon einige male gute Ratschläge bekam, aber dem war an diesen tage nicht so mir wurden nur Sinnlose Geschichten erzählt die mir kein stück weiter halfen und mich nur dazu drangen hier meine halbe Lebens und Programmier -geschichte zu erzählen.
              (Das klingt jetzt böse ist aber nicht so gemeint ich danke jeden der sich für mich Zeit nimmt.)

              Nun sitze ich mal wieder verzweifelnd auf meiner Couch und hoffe jetzt mal ausnahmsweise eine Lösung für mein Problem zu finden.

              LG
              johannes g

              1. Meine Herren!

                Nachdem ich nach c.a 2 Minuten begriffen hatte das es ein enormer Zeitaufwand (schätze 3-4 stunden) wäre herauszufinden wie die einzelnen Felder mit einander verknüpft sind und dieses dann noch per mysql befehl auszuführen,(nochmal etliche stunden arbeit)
                entschloss ich mich kurzerhand dies auf die im letzten post beschriebene weise zu erledigen.

                Daraus schließe ich, dass du weder die Quellsystem noch das Zielsystem selber entwickelt hast. Und Reverse-Engineering kann wirklich mühsam sein, hast du denn schon die Dokumentationen der jeweiligen Software-Pakete konsultiert? Wie heißen diese Software-Pakete denn eigentlich?

                Du willst von ??? nach Drupal. Aber sicher nicht nach einem Standard-Drupal, da läuft bestimmt eine Erweiterung, die die Daten entgegennehmen soll. Das Formular, das du derzeit befüllst gehört bestimmt zu dieser Erweiterung.

                Falls du weiterhin mit dem Schiffskran versuchen möchtest:

                $('form#s-node-form').attr('target', 'my_iframe').submit().load(function callback() {  
                     window.location = 'http://example.com/a.php?id=<?php echo $id+1; ?>';  
                });
                

                Wie sieht der fertige Quelltext aus, der von PHP an den Browser geschickt wird, wird die id im Query-Teil wie gewünscht befüllt?

                Wieso setzt du eigentlich das Formular-Ziel programmatisch immer wieder auf 'iframe', anstatt das Attribut direkt ins HTML zu schreiben?

                Hast du dir mal mit deinen Browser-Entwickler-Tools (F12, Strg + Shift + i ) die Javascript Fehlerkonsole angeshen?

                Nach welchem Schritt genau bricht das Skript ab? Ein Netzwerkmitschnitt könnte hier gut Aufschluss geben (Den kannst du auch mit den Entwickler-Tools erstellen).

                --
                “All right, then, I'll go to hell.” – Huck Finn
                1. Daraus schließe ich, dass du weder die Quellsystem noch das Zielsystem selber entwickelt hast. Und Reverse-Engineering kann wirklich mühsam sein, hast du denn schon die Dokumentationen der jeweiligen Software-Pakete konsultiert? Wie heißen diese Software-Pakete denn eigentlich?

                  Richtig ich habe keins von beiden selbst entwickelt! Ein spezielles Software Paket braucht man bei Drupal meist nicht dort kann man selber Inhaltstypen erstellen und die entsprechenden formular felder personalisieren. Das hört sich für kenner nach ner typischen baukastenprogrammierung an, ist aber bei weiten komplexer. Seiten wie www.whitehouse.gov nutzen Drupal ich kanns nur jeden entfehlen.

                  Du willst von ??? nach Drupal. Aber sicher nicht nach einem Standard-Drupal, da läuft bestimmt eine Erweiterung, die die Daten entgegennehmen soll. Das Formular, das du derzeit befüllst gehört bestimmt zu dieser Erweiterung.

                  Von einer API, also eine Seite die mir eine schnittstelle zu deren daten angeboten hat. Wenn du dich weiter damit beschäftigen möchtest wie sowas aussieht kannst du dir ja mal ein paar öffentliche apis angucken z.b. von facebook oder youtube. Für mein Problem ist ein weiteres befassen uninteressant da das einfügen in das Formular problemlos Klappt.

                  Falls du weiterhin mit dem Schiffskran versuchen möchtest:

                  $('form#s-node-form').attr('target', 'my_iframe').submit().load(function callback() {

                  window.location = 'http://example.com/a.php?id=<?php echo $id+1; ?>';
                  });

                  
                  >   
                    
                  Ja will ich :) Ich meine den code oder ähnlich hatte ich nach einen Rat von dir schon probiert aber ich versuch gleich nochmal mein glück, Danke.  
                    
                  
                  > Wie sieht der fertige Quelltext aus, der von PHP an den Browser geschickt wird, wird die id im Query-Teil wie gewünscht befüllt?  
                    
                  Ja wird Sie. Am Quelltext ist nix auffälliges außer das, das Formular nicht an den iframe gesendet wird sobald ich die callback funktion einfüge.  
                    
                  
                  > Wieso setzt du eigentlich das Formular-Ziel programmatisch immer wieder auf 'iframe', anstatt das Attribut direkt ins HTML zu schreiben?  
                    
                  Ähm der Gedanke war das ich das Formular ja an die richtige URL senden muss die ja schon angegeben ist. Aber grade beim Schreiben ist mir eingefallen das ich die ja auch per .attr() Funktion zu a.php?id=<?php echo $id+1; ?> ändern kann :) Das könnte die ultimative Lösung sein :D  
                    
                    
                  
                  > Hast du dir mal mit deinen Browser-Entwickler-Tools (F12, Strg + Shift + i ) die Javascript Fehlerkonsole angeshen?  
                    
                  Ich hoffe du meinst das:  
                  Attr.specified is deprecated. Its value is always true.  
                    
                  
                  > Nach welchem Schritt genau bricht das Skript ab? Ein Netzwerkmitschnitt könnte hier gut Aufschluss geben (Den kannst du auch mit den Entwickler-Tools erstellen).  
                  >   
                  
                  Ohne mir jetzt einen Netzwerkmitschnitt angeguckt zu haben sag ich mal ab der submit Funktion.  
                    
                    
                  Auf jeden fall Danke für die gute Hilfe. Der Denkanstoß mit dem iframe wird höchstwarscheinlich mein problem lösen ich schreibe später noch ob es geklappt hat :P  
                  
                  
                  1. Meine Herren!

                    Daraus schließe ich, dass du weder die Quellsystem noch das Zielsystem selber entwickelt hast. Und Reverse-Engineering kann wirklich mühsam sein, hast du denn schon die Dokumentationen der jeweiligen Software-Pakete konsultiert? Wie heißen diese Software-Pakete denn eigentlich?

                    Richtig ich habe keins von beiden selbst entwickelt! Ein spezielles Software Paket braucht man bei Drupal meist nicht dort kann man selber Inhaltstypen erstellen

                    Das wird Drupal aber sicher bis ins kleinste Detail dokumentiert haben.

                    Du willst von ??? nach Drupal. Aber sicher nicht nach einem Standard-Drupal, da läuft bestimmt eine Erweiterung, die die Daten entgegennehmen soll. Das Formular, das du derzeit befüllst gehört bestimmt zu dieser Erweiterung.

                    Von einer API, also eine Seite die mir eine schnittstelle zu deren daten angeboten hat.

                    Du meinst vermutlich eine RESTful API. Ja das Konzept ist mir bekannt. Für dich und für die Zukunft: Wenn es um Datenabgleich geht, es ist immer nützlich direkt mit solchen Informationen rauszurücken.

                    Falls du weiterhin mit dem Schiffskran versuchen möchtest:

                    Ja will ich :) Ich meine den code oder ähnlich hatte ich nach einen Rat von dir schon probiert aber ich versuch gleich nochmal mein glück, Danke.

                    Der Code ist der selbe, den du hier schon einmal gepostet hast. Ich habe ihn nur nochmal kopiert, weil ich ein paar Fragen dazu stellen wollte.

                    Wie sieht der fertige Quelltext aus, der von PHP an den Browser geschickt wird, wird die id im Query-Teil wie gewünscht befüllt?

                    Ja wird Sie. Am Quelltext ist nix auffälliges außer das, das Formular nicht an den iframe gesendet wird sobald ich die callback funktion einfüge.

                    Vielleicht fällt jemandem aus diesem Forum ja doch etwas auf, also zeig doch einfach mal her das fertig geparste Stück Code.

                    Wieso setzt du eigentlich das Formular-Ziel programmatisch immer wieder auf 'iframe', anstatt das Attribut direkt ins HTML zu schreiben?

                    Ähm der Gedanke war das ich das Formular ja an die richtige URL senden muss die ja schon angegeben ist. Aber grade beim Schreiben ist mir eingefallen das ich die ja auch per .attr() Funktion zu a.php?id=<?php echo $id+1; ?> ändern kann :) Das könnte die ultimative Lösung sein :D

                    Aha, das target-Attribut gibt ein Zielfenster (oder Zielframe) an, in dem das Formular geöffnet werden soll. Mit dem aciton-Attribut dagegen gibt man an, an welche Adresse die Formular-Daten geschickt werden sollen. Das ist schon mal ein logischer Fehler, vielleicht sogar DER Fehler.

                    Hast du dir mal mit deinen Browser-Entwickler-Tools (F12, Strg + Shift + i ) die Javascript Fehlerkonsole angeshen?

                    Ich hoffe du meinst das:
                    Attr.specified is deprecated. Its value is always true.

                    Das ist eher eine harmlose Warnung. Aber an dieser Stelle können auch kritische Fehler gemeldet werden. Wenn du mit Javascript arbeitest ist das ein wichtiges Debugging-Werkzeug.

                    Nach welchem Schritt genau bricht das Skript ab? Ein Netzwerkmitschnitt könnte hier gut Aufschluss geben (Den kannst du auch mit den Entwickler-Tools erstellen).

                    Ohne mir jetzt einen Netzwerkmitschnitt angeguckt zu haben sag ich mal ab der submit Funktion.

                    Ich wollte eigentlich ein kleines Protokoll von dir hören:

                    1. Adresse http://example.com/a.php?id=1 wird vom Server angefragt
                    2. Formular ist ordnungsgemäß im Browser angekommen.
                    3. Formular wird von JavaScript ordnungsgemäß befüllt
                    4. Formular wird im Hintergrund (im Iframe) abgesendet.
                    5. Clientseite Weiterleitung auf http://example.com/a.php?id=2 wird ausgelöst.
                    6. Server antwortet mit einem Fehler.

                    (So in der Art)

                    Auf jeden fall Danke für die gute Hilfe. Der Denkanstoß mit dem iframe wird höchstwarscheinlich mein problem lösen ich schreibe später noch ob es geklappt hat :P

                    Viel Erfolg weiterhin.

                    --
                    “All right, then, I'll go to hell.” – Huck Finn
              2. Hallo,

                Du sitzt da also gemütlich in deinem Ohrensessel vorm Kamin, versuchst einen Faden in ein Nadelöhr zu fädeln und ärgerst dich darüber dass das so schwierig sein kann. Dann verlässt du wutentbrannt dein warmes Heim, chaterst einen alten Fischkutter fährst raus auf die stürmische Nordsee, tauschst den Faden gegen ein Tau und versuchst nun mit dem Schiffskran das Tau bei höchstem Wellengang einzufädeln während um dich herum die Marine ein Manöver probt und auf Spatzen schießt.

                ;-)

                Feld titel
                |ID|INHALT|irgend eine Verknüpfte ID|noch eine verknüpfte ID|undnoch eine verknüpfte ID|

                Feld beschreibung
                |ID|INHALT|irgend eine Verknüpfte ID|noch eine verknüpfte ID|undnoch eine verknüpfte ID|

                Du hast wirklich mehrere separate Informationen in *einem* Feld, d.h. einer Spalte der DB? Hört sich nach einem schlechten Datenmodell an.

                Nachdem ich nach c.a 2 Minuten begriffen hatte das es ein enormer Zeitaufwand (schätze 3-4 stunden) wäre herauszufinden wie die einzelnen Felder mit einander verknüpft sind und dieses dann noch per mysql befehl auszuführen,(nochmal etliche stunden arbeit) entschloss ich mich kurzerhand dies auf die im letzten post beschriebene weise zu erledigen.

                Hört sich für mich auch wie "von hinten durch die Brust ins Knie" an.

                Du willst einen wie auch immer gearteten "Umbau" deiner DB vornehmen. Okay, das Schema, nach dem konvertiert wird, mag kompliziert sein. Aber jeden Datensatz auszulesen, per HTTP an den Browser zu schicken, per Javascript zu modifizieren und dann per HTTP wieder an den Server zurückzuschicken, um so den modifizierten Datensatz wieder in die DB zu schreiben, scheint mir völlig "neben der Spur".

                Da wäre es doch schon wesentlich einfacher und weniger aufwendig, die Konvertierung durch ein PHP-Script erledigen zu lassen. Dann entfällt das Hin- und Herschicken, und der Zeitaufwand schrumpft von Stunden auf ein paar Sekunden.

                Als ich nun die URL http://excample.de/a.php?id=1 aufrief kam der schock

                Ja, denn example.de ist *keine* der ausgewiesenen Beispiel-Domains. Die gibt es nur für die länderneutralen TLDs .net, .org und .com.

                So long,
                 Martin

                --
                Vater Staat bringt uns noch alle unter Mutter Erde.
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    2. 	 $('form#s-node-form').attr('target', 'my_iframe').submit().load(function callback() {  
           window.location = 'http://xxx.de/a.php?id=<?php echo $id+1; ?>';  
      });
      

      so hat es leider auch nicht funktioniert. Haben sie vielleicht noch einen Lösungswansatz?