Ajax: Bei externer Aufrufung funktioniert js, aber nicht bei interner

Acriss

Gesperrt
Hi

wusste nicht wie ichs nennen sollte :(

Also,
Ich mache meine Seite mit Ajax, um die Reloads zu ersparen. Das Problem ist:
ein bestimmer js-Code wird nicht ausgeführt. Wenn ich aber auf die Direkte URL gehe, dann macht er alles genauso, wie ich möchte :rolleyes:

Mein code:
Javascript:
function improveWeapon(id,stark,energie,restEnergie, gewicht,schild)
	{
         if (stark/3 < restEnergie)
         	{
                 document.getElementById("WaffenContent").innerHTML = '<a href="#" onClick="raiseStarke('+id+','+stark+','+gewicht+','+restEnergie+');">-{Verstärken}-</a><br />';
                 }
	else
         	{
                //2) Klick hierauf
                 document.getElementById("WaffenContent").innerHTML = 'Zu wenig Energiekristalle. <a href=\'#\' onClick=\'Request("Flotte","?s=Energie");\' class=\'normal\'>Energie Kristalle suchen</a><br />';
                 document.getElementById("WaffenContent").innerHTML += '<a href=\'#\' onClick=\'Request("Waffen");\' class=\'normal\'>Zurück</a>';
		}
         return 1;
         }
PHP:
//functions.php
function js($befehl)
	{
         return '<script type="text/javascript">'.$befehl.'</script>';
         }
HTML:
<!-- 1) Klick hierauf -->
<a class="weap" href="#" onClick="improveWeapon('.$row[2].','.$row[3].','.$row[4].','.$row[5].');">Waffe verbessern</a>
PHP:
//3) Man landet hier, aber alle Felder sind normal
include("Scripte/functions.php");
$forscherschiff = 12;
echo 'Forscherschiff: '.$forscherschiff;
echo '<input type="text" id="fschiff" value="0">';
echo '<br />';
$x = 148;
$y = 56;
$z = 14;
echo '<input type="text" class="koords" id="x_koord" value="0">';
echo '<input type="text" class="koords" id="y_koord" value="0">';
echo '<input type="text" class="koords" id="z_koord" value="0">';
switch($_GET['s'])
	{
         case 'Energie':
		if($forscherschiff > 0)
                 	{
                         echo js('alert("HUHU");');
                         echo js('document.getElementById("fschiff").value = 1;');
                         echo js('document.getElementById("x_koord").value = '.$x.';');
                         echo js('document.getElementById("y_koord").value = '.$y.';');
                         echo js('document.getElementById("z_koord").value = '.$z.';');
                         }
                 break;
         default:
         	break;
         }

Die Funnktion Request hat folgenden Aufbau:
Javascript:
function Request(url,anhang)
	{
        [...]
        url = '../'+url+'.php'+anhang;
        http_request.onreadystatechange = ShowContent;
        http_request.open('GET', url, true);
        http_request.send(null);
    }
Ich habe alles überprüft:
$_GET usw ist alles richtig, ein echo inder der if gibt auch etwas aus, nur werden die js(); nicht ausgeführt -.-
 
onreadystatechange ist sozusagen ein Eventhandleer der seinen Zustand ändert sowas wie window.onload oder image.onload. Und liefert das readyState Object.

Code:
    xmlrequest.onreadystatechange = function () {
                if(xmlrequest.readyState  ==  '4') { // nun ist alles komplett da
                       // deine Funktion die du aufrufen willst
                }
   }

hier sieht man es zum beispiel mal

http://developer.mozilla.org/de/docs/AJAX:Getting_Started
 
Zuletzt bearbeitet:
Da hab ich meinen "Request-Code" auch her :)

Was soll ich denn dann benutzen, wenn onreadystatechange nicht funktioniert?
 
Hi,

ich denke, dein Problem ist, dass das JavaScript zwar ins Dokument geschrieben, aber nicht ausgeführt wird.

Sven Mintel hat hier einen Workaround vorgestellt, der die Script-Bereiche eines Strings durchläuft und ausführt.

Ciao
Quaese
 
Hi,

vielleicht hilft dir das Trennen des neuen Inhalts und des JavaScripts im Verarbeitungsscript. Zurückgegeben wird ein "Objekt-String", der auf der Empfängerseite mit eval wieder in ein Objekt umgewandelt werden kann - Stichwort JSON.

Das Verarbeitungsscript (response.php) könnte wie folgt aussehen:
Code:
$x = 148;
$y = 56;
$z = 14;

$strRet1 = '<input type="text" class="koords" id="x_koord" value="0">';
$strRet1 .= '<input type="text" class="koords" id="y_koord" value="0">';
$strRet1 .= '<input type="text" class="koords" id="z_koord" value="0">';

$strRet2 = 'alert("HUHU");';
//$strRet2 .= 'document.getElementById("fschiff").value = 1;';
$strRet2 .= 'document.getElementById("x_koord").value = '.$x.';';
$strRet2 .= 'document.getElementById("y_koord").value = '.$y.';';
$strRet2 .= 'document.getElementById("z_koord").value = '.$z.';';

echo(rawurlencode("{'text': '".$strRet1."', 'js': '".$strRet2."'}"));
Ein Beispieldokument:
Code:
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
<!--

var xmlHttp = false;

function instanceRequest(){
  if(window.XMLHttpRequest){ // Mozilla, Safari,...
    xmlHttp = new XMLHttpRequest();
    if(xmlHttp.overrideMimeType){
      xmlHttp.overrideMimeType('text/html'); //text/xml
    }
  }else if(window.ActiveXObject){ // IE
    try{
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
      try{
      	xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      }catch(e){}
    }
  }

  if(!xmlHttp){
    alert('Es konnte keine XMLHTTP-Instanz erzeugt werden!');
    return false;
  }
}

function theRequest() {
  // Falls noch ein Request-Objekt existiert -> zunächst beenden
  if(xmlHttp && xmlHttp.readyState){
    xmlHttp.abort( );
    xmlHttp = false;
  }

  if(!xmlHttp){
    instanceRequest();
  }

  xmlHttp.open('GET', 'response.php', true);

  xmlHttp.onreadystatechange = function () {
    if(xmlHttp.readyState == 4){
      if(xmlHttp.status == 200){
        var strRet = unescape(xmlHttp.responseText);
        // Rückgabestring mit eval in Objekt wandeln
        var arrRet = eval("("+strRet+")");
        // Textteil ausgeben
        document.getElementById("outID").innerHTML = (arrRet['text']);
        // Javascript ausführen
        eval(arrRet['js']);
      }
    }
  };

  // GET-Request
  xmlHttp.send(null);
}
//-->
</script>
</head>
<body>
  <button onclick="theRequest();">xmlRequest</button>
  <div id="outID"></div>
</body>
</html>
Vielleicht hilft dir das weiter.

Ciao
Quaese
 
Richtig, das ist mein Problem.
Der Code von Sven Mintel hat mir auch nicht weitergeholfen :(
Hat jemand eine andere Idee, wie es trotzdem funktioniert?


Hallo, ich habe das gleiche Problem. Bei mir geht der Workaround von Sven, aber ich habe ja eigentlich 3 Files. das HTML, dann das script-file und ein php file für die Abfrage. nur habe ich jetzt leider kein Plan, wie ich diese drei Files zum laufen bringe.

kann mir jemand helfen?

grüsse
 
Naja...das HTML-File ist wurscht, das JS-File ...da stehen die JS-Anweisungen drinnen und das PHP-File sollte mit JS-Code antworten, den du dann per eval() ausführst...so der grobe Ablauf.
 
Hallo Sven

kannst du es mir auch ein bisschen detailierter beschreiben? ich habe das Ding schon mehrmals angeschaut und versucht, ging aber leider nicht.

aber ich probiere nochmals weiter.

gruss
 
Zurück