[AJAX] Formular abarbeiten

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

  • [AJAX] Formular abarbeiten

    Hallo,

    ich sitz hier schon den ganzen Tag an einem Problem fest.

    Folgendes...

    Ich habe ein Formular mit mehreren Checkboxen und einem Textfeld.
    Nun soll wenn ich auf Senden klicke die Textbox verarbeitet werden.
    Der Text soll an jede pro Checkbox einmal abgeschickt werden.

    Mache ich das ohne AJAX, kommt irgendwann ein Timeout (Script im Hintergrund braucht etwas länger).

    Ich möchte also das der Text der Reihe nach verschickt wird. Also Checkbox eins abgearbeitet, dann weiter mit Checkbox zwei usw.

    Mein AJAX funktioniert soweit, allerdings arbeitet es direkt 2 Checkboxen ab.
    Also wie bekomm ich es am besten hin das es der Reihe nach durchlaufen wird?

    Hier mal der Code...

    Code:
    function get_back(a,id) { document.getElementById(id).innerHTML=a; }
    
    function doIt(url,id) {
    	var req = null;
    	try req = new XMLHttpRequest();
    	catch(ms) {
    		try req = new ActiveXObject("Msxml2.XMLHTTP");
    		catch(nonms) {
    			try req=new ActiveXObject("Microsoft.XMLHTTP");
    			catch (failed) req=null;
    		}
    	}
    	if (req==null)
    	alert("Error creating request object!");
    	req.open("GET", url, true);
    	req.onreadystatechange=function() {
    		switch(req.readyState) {
    			case 4: if(req.status!=200) {alert("Fehler:"+req.status);} 
    				get_back(req.responseText,id);	break;
    			default: return false; break;
    		}
    	};
    	req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    	req.send(null);
    }
    
    
    function doTweet() {
    	var Accounts = new Array();
    	var all_Inputs = document.getElementsByTagName("input");
    	var all_Accs = new Array();
    	var chkCounter = 0;
    	
    	for (var i=0;i<all_Inputs.length;i++) {
    		if(all_Inputs[i].name=="account[]") all_Accs.push(all_Inputs[i]);
    	}
    	
    	for (var z=0;z<all_Accs.length;z++) {
    		var account = document.getElementsByName("account[]")[z];
    		var nachricht = document.getElementsByName("nachricht").value;
    		if(account.checked==true) {
    			document.getElementById('process'+z).style.display='block';
    			doIt('ajax.php?account='+account.value+'&nachricht='+nachricht+'&id='+z,'process'+z);
    		}
    	}
    }

  • #2
    Hallo,

    Problem nicht nachvollziehbar. Wie soll man Text „an eine Checkbox schicken“?

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Ich will keinen Text an eine Checkbox schicken!
      Die Checkboxen besitzen unterschiedliche AccountIds.
      Eine AccountId und die Nachricht sollen verarbeitet werden, dann die zweite Id, dritte usw.

      Kommentar


      • #4
        Okay, dass der Browser mehrere Checkboxen gleichzeitig abarbeitet, liegt daran, dass das A in AJAX für asynchron steht. Entweder du stößt erst im onreadystatechange-Callback den nächsten Request an oder du musst synchron arbeiten, also ganz ohne onreadystatechange.

        Der momentane Ablauf ist der: Du gehst das Array durch und schickst jede Anfrage ab, was der Browser im Hintergrund parallel zur weiteren Script-Abarbeitung verarbeitet. Irgendwann, wenn du das Array durchlaufen hast, kommt die erste Antwort vom Server, vielleicht sogar mehrere gleichzeitig oder in veränderter Reihenfolge. Jede davon wird sozusagen in einem eigenen Thread von deinem onreadystatechange-Callback verarbeitet. Das ist das Wesen von AJAX.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Wie müsste ich es angehen wenn ich im onreadystatechange-Callback den nächsten Request anstossen will?

          Kommentar


          • #6
            Zitat von Clip2011 Beitrag anzeigen
            Wie müsste ich es angehen wenn ich im onreadystatechange-Callback den nächsten Request anstossen will?
            Die Frage ist so allgemein gestellt, dass ich nicht weiß, was ich dir anderes antworten soll als: „hol im Callback den nächsten Wert aus dem Array und sende ihn“.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Genau das ist mein Problem.
              Wie hole ich den nächsten Wert im Array und sende dann neu wenn das Script durchgelaufen ist?

              Kommentar


              • #8
                Übergib das Array an doIt, hol das erste Element mit shift() raus und ruf im Callback doIt mit dem dann verkürzten Array wieder auf.

                Tipp: Da dir offenbar viele Grundlagen fehlen, empfehle ich das Studium von ein paar JS- und AJAX-Tutorials.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  Da bin ich wieder.

                  Das ganze habe ich soweit hinbekommen, nur hab ich da noch ein Problem.

                  Wenn ich die Funktion die abgearbeitet werden soll in der PHP Datei die mittels AJAX aufgerufen wird auskommentiere, klappt alles Super.
                  Nehm ich die Funktion wieder rein, rennt es nicht.

                  Hier der AJAX Code...
                  Code:
                  		req.open("GET", url, true);
                  		req.onreadystatechange=function() {
                  			if(req.readyState == 4) {
                  				if(req.status!=200) {alert("Fehler:"+req.status);}
                  				
                  				if(req.responseText=="ready") {
                  					get_back('<img src="templates/img/tick.png" border="0" alt="" />',id);
                  					doTw(checked_Accs);
                  				}
                  			}
                  			else return false;
                  		};
                  		req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                  		req.send(null);
                  Habe mal nach if(req.status!=200) {alert("Fehler:"+req.status);} ein alert gemacht, das kommt. Aber er bekommt wohl "ready" nicht zurück.

                  Das PHP Script ansich funktioniert, nur bekommt die AJAX Funktion wohl ein readyState 4 und ein status 200 zurück obwohl die PHP Funktion noch garnicht abgearbeitet ist.

                  Eine Idee?

                  Kommentar


                  • #10
                    Firebug nehmen, und HTTP-Statuscode und Inhalt der Antwort im Netzwerk-Tab kontrollieren.

                    Aber er bekommt wohl "ready" nicht zurück.
                    Und was ergab die Kontrollausgabe von req.responseText?

                    Kann auch nicht schaden, bei der Kontrollausgabe da mal ein "#" o.ä. vor und hinter zu hängen - damit du erkennen kannst, ob vielleicht zusätzlicher Whitespace in der Antwort drin steckt.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      So, alles mal gemacht.

                      req.responseText ist leer.

                      Firebug sagt bei Status 200 und bei Antwort steht garnichts.

                      Kommentar


                      • #12
                        Tja, dann gibt dein serverseitiges Script wohl nichts aus. Also debugge es.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Danke, habe den Fehler so jetzt finden können.

                          Habe die Funktion ausserhalb der normalen Webseite aufgerufen, da ja aus ner extra Datei. Daher passten zwei Includes nicht, wo ich dummerweise auch ein @ davor gemacht hatte und somit keinen Fehler bekam.

                          Ich danke dir. Hatte mittlerweile echt nen Brett vor dem Kopf.

                          Kommentar

                          Lädt...
                          X