JavaScript HTTPRequest-Frage

M3Y3R

Well-known member
ID: 336361
L
8 Mai 2006
1.608
60
Hallo,

ich versuche mich grad ein wenig mit Javascript bzw. Ajax...
Folgendes habe ich bereits:
function makeCall(methode, ziel, element){
var http = null;
if (window.XMLHttpRequest) {
http = new XMLHttpRequest();
} else if (window.ActiveXObject) {
http = new ActiveXObject("Microsoft.XMLHTTP");
}
if (http != null) {
http.open(methode, ziel, true);
http.onreadystatechange = function(){
if (http.readyState == 4) {
var rueckgabe = http.responseText;
document.getElementById(element).innerHTML = rueckgabe;
}
}
http.send(null);
}
}

Die Seite die das aufruft ist eine PHP-Datei die die gesamte Ausgabe in ein Array ($gui->page[])schreibt...

PHP:
$gui->siteHead($gui->conf['title']);
  $gui->openSkeletonTable();
  $gui->createMenu();
  $gui->openContentArea();

  $gui->page[] = '<div id="ausgabe">';
  if(!empty($site)){
    require_once('content/'.$site.'.inc.php');
  }else{
    require_once('content/start.inc.php');
  }
  $gui->page[] = '</div>';
  
  $gui->closeContentArea();
  $gui->closeSkeletonTable();
$gui->siteFoot();
$gui->printPage();

Die oben stehende Javascript Funktion wird wie folgt aufgerufen:
onclick="makeCall(\'GET\', \'content/mich.inc.php\', \'ausgabe\');"

Es wird zwar eine Ausgabe erzeugt, jedoch steht vor der eigentlichen Ausgabe immer "Array".

Kann es sein, dass etwas in der JavaScript-Funktion nicht stimmt?
Muss anstelle des responseText vielleicht etwas anderes hin oder muss das ganze durch eval() damit das Array verschwindet ?

Irgendwie hab ich grad keinen blassen schimmer und über Google auch nicht wirklich was gefunden...

Danke für die Hilfe!


MFG
Papenburger
 
Wieso wird das denn in ein Array geschrieben? Kannst das nciht ohne machen?
K.a. wie deine GUI da arbeitet, aber wenns in nem Array geschrieben wird und dann sowas wie print_r durchgeführt wird, dann bekommst du natürlich ne ausgabe inetwa wie:

Array(0=>inhalt,1=>inhalt2)

Sinnvoll wäre es wenn du es als reinen text ausgeben würdest.
 
Weil ich nicht jede Seite einzelnd erzeugen will und dafür eine Klasse erstellt habe die sämtlichen Inhalt bzw. die Struktur der Seite beinhaltet und später ausgibt...

Der inhalt wird später einfach über eine foreach-Schleige und ein echo ausgegeben.
 
Möglicherweise ist dein erstes $gui->page[]-Element ein weiteres Array, wenn du ein Array echost kommt auch "Array" raus => Ergebnis stimmt;)
 
Möglicherweise ist dein erstes $gui->page[]-Element ein weiteres Array, wenn du ein Array echost kommt auch "Array" raus => Ergebnis stimmt;)

Nein leider ist dies kein Array...
Das erscheint nur, wenn ich die entsprechende "mich-Seite" über Ajax aufrufen will, sonst nicht...

Also nur dann, wenn er den HTTPRequest absetzt und die Daten zurück bekommt...
 
Extrem umstaendlich wie du's machst, aber egal. Ich nehm mal an dass
PHP:
$gui->printPage()
einfach nur
PHP:
print($page)
macht, und da dass ein Array ist bekommst du nur "Array" raus.

Ersetz doch einfach
PHP:
$gui->printPage()
mit
PHP:
foreach($gui->page as $p{print($p);}
, und mal gucken was passiert.
 
Extrem umstaendlich wie du's machst, aber egal. Ich nehm mal an dass
PHP:
$gui->printPage()
einfach nur
PHP:
print($page)
macht, und da dass ein Array ist bekommst du nur "Array" raus.

Ersetz doch einfach
PHP:
$gui->printPage()
mit
PHP:
foreach($gui->page as $p{print($p);}
, und mal gucken was passiert.

Ersteinmal danke für deinen Post. So ganz doof bin ich allerdings auch nicht.
Ich habe oben doch geschrieben, das $gui->page[] durch eine ForEach-Schleife läuft und dann ausgegeben wird...

Von daher ist das nicht die Ursache des Fehlers. Die Ursache muss im JavaScript sein, da wenn ich die Funktion auskommentiere, das Array verschwinden. Aber auch der Aufruf klappt dann nicht mehr. Rufe ich die Seite direkt auf, wird alles normal angezeigt...
 
Guck Dir doch mal mit Firebug an, was der Aufruf wirklich zurückgibt und bei der Gelegenheit kannste auch gleich im Javascript-Debugger 'nen Breakpoint bei var rueckgabe = http.responseText; setzen und gucken, was die Variable anschliessend beinhaltet.