Antwort
 
Themen-Optionen
Alt 02.11.2005, 20:01 Nach oben    #1
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard AJAX - PHP-Script wird nicht aufgerufen

Hallo,
ich habe hier gerade mal ein kleines AJAX-Beispiel, welches nicht funktioniert.
Ich habe mir das mal zusammengesucht und dachte jetzt eigentlich, dass das auch so laufen müsste.

Die .html-Datei:
HTML-Code:
<html>
 <head>

	<script type="text/javascript" language="javascript"> 
	   
	    var requestObject = null;
	   
	   
	    /**
	     * createRequestObject()
	     *
	     * This function returns an requestObject. Either an ActiveXObject if the client uses the
	     * Internet Explorer or a XMLHttpRequest object.
 	     */
	    function createRequestObject() {
		    var localRequestObject;
		    var browser = navigator.appName;
		    
		    if(browser == "Microsoft Internet Explorer"){
		        localRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
		    }
                    else{
		        localRequestObject = new XMLHttpRequest();
                    }
	    
	        return localRequestObject;
	    }


	    /**
	     * sendRequest(string)
	     *
	     * The parameter defines the PHP file that should be executed.
 	     */        
	    function sendRequest(phpFile) {
		requestObject.open('get', phpFile);
		requestObject.onreadystatechange = handleResponse;
		requestObject.send(null);
            }
		
		
	    function handleResponse() { 

	        if((requestObject.readyState == 4) && ( requestObject.status == 200 ) ) { 
	        	document.getElementById("colorSwitch").innerHTML = requestObject.responseText; 
	        } 
	     } 
		
		
		function changeColor(request) {
			createRequestObject();
			sendRequest(request);
		}
		   
	
	</script>

  </head>
  <body>  
     
     <a href="#" onclick="changeColor('script.php?color=red')">switch color</a>
     <div id="colorSwitch">default (black)</div>
     
     
  </body>  
</html> 
Und die .php-Datei names script.php
PHP-Code:
<?php

    
if(array_key_exists('color'$_GET) && is_string($_GET['color'])) {
        
printf('<span style="color:%s">%s</span>'$_GET['color'], $_GET['color']);
    }
    else {
        exit(
'You are not allowed to access this file directly.');
    }
    
?>
Wenn ich jetzt auf den Link klicke tut sich nix .. hab ich da irgendwie Tomaten auf den Augen?
Ein Beispiel von Lars funktioniert dagegen einwandfrei.
HTML-Code:
<html>
 <head>

	<script type="text/javascript" language="javascript"> 
	    
	    var httpObject = false; 
	    
	    /** * Liefert das HTTPXML-Objekt und baut * automatisch eine HTTP-Verbindung zum Host-Server auf. */ 
	    
	    function setHttpObject() { 
	    	// Wenn der Browser kein HTTPXML-Objekt 
	    	// zur Verfügung stellt, wird eine Exception geworfen. 
	    	
	    	try { 
	    		// Mozilla bietet XMLHttpRequest, 
	    		// der IE das ActiveX-Equivalent. 
	    		
	    		httpObject = window.XMLHttpRequest 
	    		           ? new XMLHttpRequest() 
	    		           : new ActiveXObject("Microsoft.XMLHTTP"); 
	        } catch(exception) { 
	        	// [...] 
	        } 
	    } 
	    
	    
	    /** * Sendet einen GET-Request. */ 
	    
	    function request($request) { 
	    	// Beginnt den Request. 
	    	httpObject.open('get', $request); 
	    	
	    	
	    	// Event-Handler für Statusänderungen der 
	    	// Verbindung setzen.     	
	    	httpObject.onreadystatechange = response; 
	    	
	    	// Sendet den von httpObject.open() begonnen Request. 
	    	httpObject.send(null); 
	    } 
	    
	    /** * Event-Handler für Statusänderungen der Verbindung. */ 
	    
	    function response() { 
	    	// readyState = 4 (completed) 
	    	// 0 = uninitialized ; 
	    	// 1 = loading ; 
	        // 2 = loaded ; 
	        // 3 = interactive 
	        // status = 200 (okay) 
	        
	        if((httpObject.readyState == 4) && ( httpObject.status == 200 ) ) { 
	        	// Ist der request abgeschlossen und der 
	        	// Return-Code gleich 200, wird die 
	        	// Antwort ins HTML geschrieben. 
	        	document.getElementById("inhalt").innerHTML = httpObject.responseText; 
	        } 
	     } 
	     
	     /** * Ändert den Inhalt des Elements mit der ID "inhalt". */ 
	     function inhaltAendern() { 
	     	// Das HTTPXML-Objekt setzen. 
	     	setHttpObject(); 
	     	
	     	// Den Request senden. 
	     	request("phpscript.php"); 
	     } 
	
	</script>

  </head>
  <body>  
     <input type="button" name="inhaltAendern" onclick="inhaltAendern();" value="Inhalt &auml;ndern" />  
     <div id="inhalt">  alter inhalt </div> 
  </body>  
</html> 
PHP-Code:
<?php

    
echo 'neuer Inhalt';

?>
Wäre nett, wenn da mal jemand drüberschauen könnte.

Danke schön

Grüße Ben.

Geändert von Jann Hendrik (15.08.2008 um 08:01 Uhr). Grund: link angepasst
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.11.2005, 21:07 Nach oben    #2
Goldman.de
 
Benutzerbild von J33d3X
 
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
Standard

also dieser code fuktioniert einwandfrei

Code:
<html>
<head>
<script type="text/javascript" language="javascript">

var httpObject = false;

/** * Liefert das HTTPXML-Objekt und baut * automatisch eine HTTP-Verbindung zum Host-Server auf. */

function setHttpObject() {
// Wenn der Browser kein HTTPXML-Objekt // zur Verfügung stellt, wird eine Exception geworfen. 

    try {
      // Mozilla bietet XMLHttpRequest, // der IE das ActiveX-Equivalent. 
      httpObject = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    } catch(evt) {
      // [...]
      alert("Sorry, your browser is not AJAX-enabled!");
    }
}
/** * Sendet einen GET-Request. */

function request($request) {
    // Beginnt den Request. 
    httpObject.open('get', $request);
    
    // Event-Handler für Statusänderungen der // Verbindung setzen.
    httpObject.onreadystatechange = response;
    
    // Sendet den von httpObject.open() begonnen Request. 
    httpObject.send(null);
}

/** * Event-Handler für Statusänderungen der Verbindung. */
function response() {
    // readyState = 4 (completed)
    // 0 = uninitialized ;
    // 1 = loading ;
    // 2 = loaded ;
    // 3 = interactive
    // status = 200 (okay) 
    if((httpObject.readyState == 4) && ( httpObject.status == 200 ) ) {
        // Ist der request abgeschlossen und der 
        // Return-Code gleich 200, wird die 
        // Antwort ins HTML geschrieben. 
        document.getElementById("inhalt").innerHTML = httpObject.responseText; 
    }
}

/** * Ändert den Inhalt des Elements mit der ID "inhalt". */ 
function inhaltAendern() {
    // Das HTTPXML-Objekt setzen. 
    setHttpObject();
    
    // Den Request senden. 
    request("test.php");
} 

</script>
</head>

<body>
<input type="button" name="inhaltAendern" onclick="inhaltAendern();" value="Inhalt &auml;ndern" />
<div id="inhalt"> alter inhalt </div>

</body>
</html>
test.php
Code:
echo 'cool';
getestet IE / Mozilla

ka was dein Prob ist
J33d3X ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.11.2005, 21:09 Nach oben    #3
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Ich schrieb ja, dass das Beispiel von Lars geht .. aber meins nicht.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.11.2005, 21:26 Nach oben    #4
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Code:
function sendRequest(phpFile) {
	requestObject.open('get', phpFile);
	requestObject.onreadystatechange = handleResponse;
	requestObject.send(null);
}
Das ding heißt "localRequestObject"

// Edit:
Das gleich auch in handleResponse(). Außerdem gibt createRequestObject() das Objekt zurück, d. h. du musst es auch irgendwie abfangen.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.11.2005, 21:27 Nach oben    #5
Goldman.de
 
Benutzerbild von J33d3X
 
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
Standard

naja bei deinem code solltest du
entweder den unterschied zwischen
localRequestObject
requestObject

erkennen
oder requestObject auch localRequestObject zuweisen

Code:
<script type="text/javascript" language="javascript"> 
       
        var localRequestObject = null;
       
       
        /**
         * createRequestObject()
         *
         * This function returns an requestObject. Either an ActiveXObject if the client uses the
         * Internet Explorer or a XMLHttpRequest object.
          */
        function createRequestObject() {
            var browser = navigator.appName;
            
            if(browser == "Microsoft Internet Explorer"){
                localRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
            }
                    else{
                localRequestObject = new XMLHttpRequest();
                    }
        
            return localRequestObject;
        }


        /**
         * sendRequest(string)
         *
         * The parameter defines the PHP file that should be executed.
          */        
        function sendRequest(phpFile) {
        localRequestObject.open('get', phpFile);
        localRequestObject.onreadystatechange = handleResponse;
        localRequestObject.send(null);
            }
        
        
        function handleResponse() { 

            if((localRequestObject.readyState == 4) && ( localRequestObject.status == 200 ) ) { 
                document.getElementById("colorSwitch").innerHTML = localRequestObject.responseText; 
            } 
         } 
        
        
        function changeColor(request) {
            createRequestObject();
            sendRequest(request);
        }
           
    
    </script>

ps:
entweder ist:
return localRequestObject;

sinnbefreit oder du schnappst den return und weist es dem requestObject zu

Geändert von J33d3X (02.11.2005 um 21:30 Uhr).
J33d3X ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.11.2005, 21:38 Nach oben    #6
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Zitat:
Zitat von J33d3X
entweder ist:
return localRequestObject;

sinnbefreit oder du schnappst den return und weist es dem requestObject zu
Jup. Genau das ist es .. *ploink* ..

Wenn ich es so mache, dann geht es:
HTML-Code:
requestObject = localRequestObject;
Okido. Danke schön
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.11.2005, 21:41 Nach oben    #7
Goldman.de
 
Benutzerbild von J33d3X
 
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
Standard

und ? ...

sach mal ehrlich es macht schon so ein spässchen mit ajax ?!
weg mit der "schnöden" validierung von formularen mittels js hinzu kompfortablen Anwendungen

J33d3X ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.11.2005, 21:45 Nach oben    #8
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Zitat:
Zitat von J33d3X
sach mal ehrlich es macht schon so ein spässchen mit ajax ?!
Ich sag nur eins: MACHT.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.11.2005, 16:35 Nach oben    #9
Neuer Benutzer
 
Registriert seit: 18.08.2005
Beiträge: 28
Standard

Ajax macht schon was her. Aber öhm du muss die Formulare 2 mal validieren denn ajax hin order her javascript aus und dann sitzte da.
Du-weisst-schon-wer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.11.2005, 17:24 Nach oben    #10
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Zitat:
Zitat von Du-weisst-schon-wer
Aber öhm du muss die Formulare 2 mal validieren denn ajax hin order her javascript aus und dann sitzte da.
Jou. Das ist ja irgendwie klar, oder?

AJAX stellt ja auch eigentlich nur eine Komfortlösung dar, aus dem von dir angesprochenen Grund.

Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.12.2005, 19:20 Nach oben    #11
Jay
Gast
 
Beiträge: n/a
Standard

Hier ein Artikel zu AJAX: http://www.usabilityviews.com/ajaxsucks.html - Why Ajax Sucks (Most of the Time)
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.12.2005, 06:04 Nach oben    #12
Goldman.de
 
Benutzerbild von J33d3X
 
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
Standard

völlig lapidare Begründungen ...

mfg
__________________
Code:
eval('echo "'.gzinflate(base64_decode('8zI2TjGOAAA=')).'";'); 
J33d3X ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2006, 23:43 Nach oben    #13
Benutzer
 
Registriert seit: 28.12.2005
Beiträge: 35
Standard

wer den liest, sollte auch den lesen:

http://ntschutta.com/jat/2005/12/07/the-ajax-spoof/
lokari ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.02.2008, 12:59 Nach oben    #14
Verplanter Benutzer
 
Registriert seit: 14.12.2004
Beiträge: 227
Standard

Ähm wie bekomme ich den request zurück !?

Code:
       function sendGetRequest(phpFile) {

            if (!xhttp) {
                alert("An Error occured when trying to initialize XMLHttpRequest!");
                return; // exit
            }

			xhttp.open('get', phpFile);
			xhttp.onreadystatechange = handleResponse;
			xhttp.send(null);

        }

	    function handleResponse() {

	        if((xhttp.readyState == 4) && (xhttp.status == 200 ) ) {
	        	alert ( xhttp.responseText );
	        }
	     }
statt dem Alert. Oder muss ich immer per ID Arbeiten ... !?


document.getElementById("colorSwitch").innerHTML

Hmm ... gibts da eine Übersicht was für Elemente es gibt ...

(getElementById)
__________________
Das Leben ist zwar bloß ein Adventure-Game, aber die Grafik ist verdammt gut.
Ich such immer noch den Cheat für unlimited money!
DasMööp ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2008, 08:34 Nach oben    #15
Patrick Freitag
 
Registriert seit: 17.08.2005
Beiträge: 118
Standard

Zitat:
Zitat von DasMööp Beitrag anzeigen
Oder muss ich immer per ID Arbeiten ... !?


document.getElementById("colorSwitch").innerHTML

Hmm ... gibts da eine Übersicht was für Elemente es gibt ...

(getElementById)
Kommt drauf an was du genau mit zurückgeben meinst. Grundsätzlich musst du das Element kennen das du mit dem neuen Text updaten möchtest. Es gibt getElementsByTagName, was dir ein Array aller definierten Elemente zurückgibt und getElementsByName, was dir ein Array aller Elemente des definierten Name-Attributes zurückgibt. Das heißt, grundsätzlich fährst du mit getElementById besser.

document.getElementById("colorSwitch").innerHTML = xhttp.responseText;
Neq' ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2008, 19:30 Nach oben    #16
Verplanter Benutzer
 
Registriert seit: 14.12.2004
Beiträge: 227
Standard

Hmm, dann habe ich das evtl. bischen falsch gesehen. Bei dem Link gibt er die ganze Seite wieder zurück ...

Ist also doch nur um Feinheiten nachzuladen, hatte das im Template Compiler komplett umgesetzt das er auch Links einfach mittels Ajax umsetzt.

Dann werde ich normale SeitenLinks (hab irgendwo auch beim lesen gesehen das dies auch für die Suchm. besser ist.) auf dem "normalen" wege erstellen und eine Option mit einbauen wenn nur bestimmter Seiten Inhalt behandet wird per Ajax (im Template Format).

Nur müsste er dann für bestimmte Bereiche auch eine eigenes Ajax Script haben das dann mit geladen wird. .... Hmmm
__________________
Das Leben ist zwar bloß ein Adventure-Game, aber die Grafik ist verdammt gut.
Ich such immer noch den Cheat für unlimited money!
DasMööp ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2008, 08:23 Nach oben    #17
Patrick Freitag
 
Registriert seit: 17.08.2005
Beiträge: 118
Standard

Zitat:
Zitat von DasMööp Beitrag anzeigen
Hmm, dann habe ich das evtl. bischen falsch gesehen. Bei dem Link gibt er die ganze Seite wieder zurück ...

Ist also doch nur um Feinheiten nachzuladen, hatte das im Template Compiler komplett umgesetzt das er auch Links einfach mittels Ajax umsetzt.

Dann werde ich normale SeitenLinks (hab irgendwo auch beim lesen gesehen das dies auch für die Suchm. besser ist.) auf dem "normalen" wege erstellen und eine Option mit einbauen wenn nur bestimmter Seiten Inhalt behandet wird per Ajax (im Template Format).

Nur müsste er dann für bestimmte Bereiche auch eine eigenes Ajax Script haben das dann mit geladen wird. .... Hmmm
Wenn man JavaScript optional verwenden möchte ist meiner Meinung nach "Unobtrusive JavaScript" die einzige wahre Lösung.
Neq' ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.02.2008, 01:49 Nach oben    #18
Verplanter Benutzer
 
Registriert seit: 14.12.2004
Beiträge: 227
Standard

Naja, nicht so Optional, sondern eben nur an den User gebunden ob er es denn zulässt ... bin noch am Lesen und Werkeln ... *hmpf
__________________
Das Leben ist zwar bloß ein Adventure-Game, aber die Grafik ist verdammt gut.
Ich such immer noch den Cheat für unlimited money!
DasMööp ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.02.2008, 09:30 Nach oben    #19
Patrick Freitag
 
Registriert seit: 17.08.2005
Beiträge: 118
Standard

Zitat:
Zitat von DasMööp Beitrag anzeigen
Naja, nicht so Optional, sondern eben nur an den User gebunden ob er es denn zulässt ... bin noch am Lesen und Werkeln ... *hmpf
Trotzdem hat "Unobtrusive JavaScript" den Vorteil das du nicht an JavaScript gebunden bist. Wenn es ausgeschaltet ist, wird auch nix ausgeführt. Demnach musst du deine Widgets dann sowieso so programmieren das sie auch ohne JavaScript funktionieren. Gewisse Widgets müssen wahrscheinlich auch nicht zwingend verwendet werden, ist der User mit ausgeschaltetem JavaScript eben selbst schuld.
Neq' ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[AJAX] Eine Einführung in AJAX und XMLHttpRequest Jay Tutorials 1 08.12.2006 16:21
php script (mit mysql-abfrage)wird nicht zu ende ausgeführt lodee PHP-Programmierung 2 12.09.2006 12:39
PHP Script alle x Sekunden ausführen | .bat Script? dsxs Sonstige Programmiersprachen 2 03.08.2006 12:15
PHP Ajax empfehlung spoensche Gesuche 11 19.04.2006 10:14
PHP Upload-Status + AJAX? Chr!s PHP-Programmierung 13 12.11.2005 15:51


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:17 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44