jQuery & Ajax

Senshi86

Erfahrenes Mitglied
N'abend :)

bin grad etwas m verzweifeln und hoffe hier auf ein paar Ideen die mir zur Lösung verhelfen könnten :)

Und zwar folgendes. Ich bastele zur Zeit an einem Script, welches Daten von einer Seite auslesen und diese an eine andere schicken soll. Diese Daten einfach an die URL für GET dran zu hängen funktioniert einwandfrei, da aber schnell einiges zusammen kommen kann, ist GET mit seinen Limitierungen aber leider nicht das richtige. Also wollte ich es mit POST versuchen und dachte mir, warum nicht gleich mit Ajax senden.

Mein Ausgangsscript dazu (jQuery), von einer meiner Aeiten bei denen Ajax schon funktioniert:
Code:
function set_text(id, text) {
	var url = $('#ajaxurl').val() + '&ajax=99';
	var data = 'text_id=' + text;
	$.ajax({
		type: 'POST',
		url: url,
		data: data,
		dataType: 'xml',
		success: function(xml) {
			$('#' + id).html($(text, xml).text());
		},
	    error: function(XMLHttpRequest, textStatus, errorThrown) {
			alert ('An error occured!');
		}
	});
}
Wie gesagt, diese Variante des Versenden von Daten mit jQuery Ajax typ POST funktioniert einwandfrei.

Jetzt hab ich diesen Part 1:1 in mein neues Script übernommen, der geht auch rein, ruft auch meine Ajax Seite auf, hat auch ordentlich die GET Parameter an der URL dran, aber die POST Parameter fehlen auf einmal und ich hab einfach keine Ahnung warum, hab schon jetzt Stundenlang herum gedoktert aber ist nichts bei rum gekommen. Das aktuelle Script sieht so aus:
Code:
	javascript: function remMsg(b) {
			try {
			var c = document.getElementById("TWToolMSG");
			b.removeChild(c);
			} catch (e) {}
			}
			try {
			var css = document.createElement("link"); 
			css.type = "text/css"; 
			css.href="http://twtool.kilu.de/public/stylesheets/jstextbox.css";
			css.rel = "stylesheet"; 
			document.getElementsByTagName("head").item(0).appendChild(css);
			
			var nh2 = document.createElement("h2");
			nh2.innerHTML = "TWTool Übernahmestatus";
			var nP = document.createElement("p");
			nP.innerHTML = "<br />Lade Elemente ...";
			nP.id = "TWToolMSGText";
			var nDiv = document.createElement("div");
			nDiv.className = "TWToolTextBox";
			nDiv.id = "TWToolMSG";
			nDiv.style.left =  ((window.innerWidth - 400) / 2) + "px";
			nDiv.style.top = ((window.innerHeight - 200) / 2) + "px";
			nDiv.appendChild(nh2);
			nDiv.appendChild(nP);
			var b = document.getElementsByTagName("body")[0];
			b.appendChild(nDiv);
			var MST = document.getElementById("TWToolMSGText");
			
			var Hd = document.getElementsByTagName("head").item(0); 
			var Sc = document.createElement("script"); 
			Sc.type = "text/javascript"; 
			Sc.src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"; 
			Hd.appendChild(Sc);
			
			MST.innerHTML = "<br />Ermittele Inventar ...";
			
			var url = "http://twtool.kilu.de/public/index.php?world=1&amp;site=skilltool&amp;a=99&amp;ajax=6&amp;uid=1&amp;id=1";
			var data = "";
			var wear = document.getElementById("wear").getElementsByTagName("img");
			for(i = 0; i < wear.length; i++)
			{
			  data += wear[i].alt + "~";
			}
			var bag = document.getElementById("bag").getElementsByTagName("img");
			for(i = 0; i < bag.length; i++)
			{
			  data += bag[i].alt + "~";
			}
			var data = "items=" + encodeURIComponent(data);
			
			MST.innerHTML = "<br />Sende Daten ...";
			
			jQuery(document).ready( function() {
			  jQuery.ajax({
			    type: "POST",
			    url: url,
			    data: data,
			    dataType: "xml",
			    success: function(xml) {
			      jQuery("#TWToolMSGText").html("<br />Vorang abgeschlossen!");
			      window.setTimeout("remMsg(b)", 2000);
			    },
			    error: function() {
			      jQuery("#TWToolMSGText").html("<br />Fehler bei Übertragung!");
			      window.setTimeout("remMsg(b)", 2000);
			    }
			   });
			});
			
			} catch (e) {
			    MST.innerHTML = "<br />Fehler bei der Übernahme!";
			    window.setTimeout("remMsg(b)", 2000);
			}
			void(0);
Anzumerken wären noch folgende Punkte:
- Das Script wird über die URL ausgeführt (deswegen das "javascript:" davor), das Original von oben war direkt in eine Seite eingebunden
- Auf der Seite wird bereits mit Mootools gearbeitet, deswegen hab ich statt des $ auch schon überall jQuery verwendet um Verwechslungen zu unterbinden, hatte auch schon mal versucht das Problem mit Mootools zu lösen aber irgendwie komm ich damit net klar und es funktioniert hinten und vorne nicht, deswegen halt etwas umständlicher meine jQuery Lösung.
- Wenn ich vor dem ajax Request mit alert() die variablen url sowie data ausgeben lasse, sind beide ordentlich gefüllt.
- Solange ich bei einer Alert Ausgabe nicht bestätige, wird der Ajax Request definitiv nicht ausgeführt, das weiß ich weil ich mir während der PHP Bearbeitung nen Merker in der Datenbank setze, der kommt erst rein wenn alle Alerts bestätigt sind. Das heißt ich kann auch ausschließen, dass sich die Script Stücke aus irgendwelchen Gründen gegenseitig überholen.

Falls jemand noch mehr Infos braucht, einfach fragen :)

Danke und Gruß
Marcel
 
Moin,

was mir da generell spanisch vorkommt:

Du arbeitest da mit $(document).ready() ...wenn das Skriptlet über die URL ausgeführt wird, dürfte doch aber sicher das Dokument schon geladen sein.
Bist du sicher, dass die Funktion in $(document).ready() überhaupt aufgerufen wird?
 
Also da der Ajax request abgesetzt wird und auch ein alert darin ausgeführt wird, ja.
Aber wenn es möglich ist jquery Befehle auch ohne das .ready durch zu führen (ich habs halt bisher noch nur so kennen gelernt das die darin verkapselt sein müssen), probier ich es auch mal ohne, man weiß ja nie ob sich was ändert und bei dem Umfang des Scripts sind ein paar Zeichen weniger auch nicht verkehrt.
Wie bereits gesagt, das einzige Problem, dass das Script noch hat, es sendet aus mir nicht findbaren gründen nicht die POST Daten die ich senden will, der Rest ist in Ordnung.

// Edit: Also spart leider nur zwei Zeilen Code, er wird immer noch gesendet und es kommen immer noch keine POST Daten mit =/


// Edit²: Frage.
Ich hab ja folgende Situation, dass von einem Server x (bzw. halt der url und einer von Server x geladenen Seite) ein ajax an meinen Zielserver y absetzt.
Kann es nun sein, dass Server y in diesem Fall Postdaten einfach nicht akzeptiert? Möglicherweise aus Sicherheitsgründen?
Weil ich hab mir grad noch mal jquery ungepackt geladen und direkt vor dem Senden der Daten die Datenvariable ausgeben lassen und da war alles richtig drin. Lass ich mir aber direkt am Anfang meines PHP Scriptes dann eben diese Variable ausgeben (halt in die Datenbank da bei nem Ajax sonst nix funktioniert), ist der leer.
Anders kann ich mir das momentan eigentlich nicht erklären, auch wenn ich momentan nicht wüsste, wie der Server nen Unterschied machen kann von wo der Ajax Befehl abgesetzt wird, da es ja in beiden Varianten eben vom Client kommt ...
 
Das kann schon sein, dass ein Server POST-Daten nicht annimmt.

Schau doch mal in Firebug im Netzwerk-Tab nach, was wirklich gesendet wurde(da spielt keine Rolle, ob der Server es mag)
Vielleichtz greifst du serverseitig nur falsch drauf zu.
 
An Firebug hatte ich noch gar nicht gedacht ... habs auch erst seit kurzem installiert weil ich mal irgendwo was davon gelesen hab, kenns daher noch net richtig =/

Auf jeden Fall, er sendet tatsächlich keine POST Daten, der Request wird aber abgesendet, darin liegt das Problem nicht.
jQuery ist auf jeden Fall in die Seite eingebunden, hab ich noch mal geprüft und würde anderweitig ja eh nen Fehler geben weil er die Funktion nicht kennt.
Aber wenn ich es mir so anschaue scheint jQuery nur einen POST request zu senden / senden zu können, wenn es auf die gleiche URL geht wie die Seite die geladen ist ... kann das jemand Bestätigen oder weiß eine Lösung dafür?

Ich hab nämlich mal folgendes Script laufen lassen (meiner Seite, online Webserver nicht lokal)
Code:
javascript:
var url="http://127.0.0.1/TWToolV3/public/test.php";
var data='data=TestData';
 jQuery.ajax({
   type:"POST",
   url:url,
   data:data,
   dataType:"xml",
   success:function(xml){j
     Query("#TWToolMSGText").html("Vorang abgeschlossen!");
     window.setTimeout("remMsg(b)",2000);
   },
   error:function(){
     jQuery("#TWToolMSGText").html("Fehler bei Übertragung!");
     window.setTimeout("remMsg(b)",2000);
   }
 }); void(0);
Lasse ich es so wie oben laufen kommt kein POST mit, änder ich jetzt auf die richtige URL, statt 127.0.0.1 zu twtool.kilu.de, kommen POST Daten mit.
Irgendwie blick ich da grad net mehr durch was wie weshalb warum ...

Gruß
Marcel
 
Zurück