Problem mit POST Request - Formular absenden

HaZe

New member
Morgen =)
Also folgendes:
ich hab ein formular mit beliebig vielen (anzahl unbekannt) Input feldern die dynamisch erzeugt werden.
Das will ich nun per JS submitten und die rückgabe direkt auf der seite einfügen.
mein lösungsansatz dazu ist:
Code:
var http_request = false;

		
function makePOSTRequest(url, parameters) {
      http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
         	// set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }
      
      http_request.onreadystatechange = alertContents;
      http_request.open('POST', url, true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Content-length", parameters.length);
      http_request.setRequestHeader("Connection", "close");
      http_request.send(parameters);
   }

   function alertContents() {
      if (http_request.readyState == 4) {
         if (http_request.status == 200) {
            alert(http_request.responseText);
            result = http_request.responseText;
           
            document.getElementById('innerdiv').innerHTML = result;            
         } else {
            alert('There was a problem with the request.');
         }
      }
   }
   
   function get(obj) {
 var poststr = 
"feld1=" + encodeURI( document.getElementById("feldid1").value ) +
"&feld2=" + encodeURI( document.getElementById("feldid2").value );

		var i=1;
		
while(document.getElementById("dynamischesfeld"+i)){
poststr += "&"+i+"_feld=" + encodeURI( document.getElementById("feld"+i).value 
);
					
		i=i+1;
		}
				
document.getElementById('outerdiv').style.display = 'block'; 		
document.getElementById('innerdiv').innerHTML = '<IMG SRC="ajax-loader.gif"> Lade...';		
		
					
      makePOSTRequest('send.php', poststr);
   }

die felder werden so erzeugt:
PHP:
while($seit=mysql_fetch_array($res)){
                                     $i++;

 if($seit['captcha']==0){
echo' <input type="checkbox" name="'.$i.'_feld" value="true" id="dynamischesfeld'.$i.'" /> ';
				 }
}

Die JSfunction ist von hier:
AJAX Form POST Request - HTML Form POST/Submit with AJAX/Javascript Example/Tutorial
Es tut sich garnichts auf der site leider =(

kommentiere ich meine while schleife aus, dann geht alles wunderbar, bis auf die dynamischen felder natürlich ^^
daher vermute ich mal der fehler liegt da
 
http_request.setRequestHeader("Content-length", parameters.length);

Das geht so nicht.
Content-Length ist die Anzahl der Bytes. Wenn du also "wert=bla" übermittelst, dann ist Content-Length: 8
Be dir ist Content-Length dann aber die Anzahl der übergebenen Parameter.

Ich würde empfehlen Diese Zeile einach komplett weg zu lassen. Ich hab seber noch nie eine POST-Anfrage per AJAX gemacht, daher kann ich nicht sagen, ob noch mehr falsch ist. Ich könnte mir vorstellen, dass du die Daten - wenn du es schon angegibst - auch selber urlencoden musst.

EDIT:
http_request.send(parameters);
Das ist auch falsch. Du musst dir, wie bei einem GET-Request, die Werte als URL zusammenbauen.
Siehe: AJAX:Getting Started − MDC
 
Zuletzt bearbeitet:
http_request.setRequestHeader("Content-length", parameters.length);

Das geht so nicht.
Content-Length ist die Anzahl der Bytes. Wenn du also "wert=bla" übermittelst, dann ist Content-Length: 8
Be dir ist Content-Length dann aber die Anzahl der übergebenen Parameter.

Ich würde empfehlen Diese Zeile einach komplett weg zu lassen. Ich hab seber noch nie eine POST-Anfrage per AJAX gemacht, daher kann ich nicht sagen, ob noch mehr falsch ist. Ich könnte mir vorstellen, dass du die Daten - wenn du es schon angegibst - auch selber urlencoden musst.

EDIT:
http_request.send(parameters);
Das ist auch falsch. Du musst dir, wie bei einem GET-Request, die Werte als URL zusammenbauen.
Siehe: AJAX:Getting Started − MDC
das stimmt schon alles, die parameter werden ja hier zusammengebaut:
Code:
 function get(obj) {
 var poststr = 
"feld1=" + encodeURI( document.getElementById("feldid1").value ) +
"&feld2=" + encodeURI( document.getElementById("feldid2").value );

		var i=1;
		
while(document.getElementById("dynamischesfeld"+i)){
poststr += "&"+i+"_feld=" + encodeURI( document.getElementById("feld"+i).value 
);
					
		i=i+1;
		}
				
document.getElementById('outerdiv').style.display = 'block'; 		
document.getElementById('innerdiv').innerHTML = '<IMG SRC="ajax-loader.gif"> Lade...';		
		
					
      makePOSTRequest('send.php', poststr);
   }

und beim zusammenbau tritt ja das problem auf
 
habs gelöst, der code wie er oben steht funktioniert, in dem den ich hatte war ein schreibfehler drin.
danke an alle
 
Zurück
Oben