![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
|
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> PHP-Code:
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 ändern" /> <div id="inhalt"> alter inhalt </div> </body> </html> PHP-Code:
Danke schön Grüße Ben. |
|
|
|
|
|
Nach oben #2 |
|
Goldman.de
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
|
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 ändern" />
<div id="inhalt"> alter inhalt </div>
</body>
</html>
Code:
echo 'cool'; ka was dein Prob ist |
|
|
|
|
|
Nach oben #4 |
|
me pro ok?
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
|
Code:
function sendRequest(phpFile) {
requestObject.open('get', phpFile);
requestObject.onreadystatechange = handleResponse;
requestObject.send(null);
}
// 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. |
|
|
|
|
|
Nach oben #5 |
|
Goldman.de
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
|
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). |
|
|
|
|
|
Nach oben #6 | |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
|
Zitat:
Wenn ich es so mache, dann geht es: HTML-Code:
requestObject = localRequestObject; |
|
|
|
|
|
|
Nach oben #10 | |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
|
Zitat:
AJAX stellt ja auch eigentlich nur eine Komfortlösung dar, aus dem von dir angesprochenen Grund. Grüße Ben. |
|
|
|
|
|
|
Nach oben #11 |
|
Gast
Beiträge: n/a
|
Hier ein Artikel zu AJAX: http://www.usabilityviews.com/ajaxsucks.html - Why Ajax Sucks (Most of the Time)
|
|
|
|
Nach oben #14 |
|
Erfahrener Benutzer
Registriert seit: 14.12.2004
Beiträge: 212
|
Ä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 );
}
}
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! |
|
|
|
|
|
Nach oben #15 | |
|
Patrick Freitag
Registriert seit: 17.08.2005
Beiträge: 106
|
Zitat:
document.getElementById("colorSwitch").innerHTML = xhttp.responseText; |
|
|
|
|
|
|
Nach oben #16 |
|
Erfahrener Benutzer
Registriert seit: 14.12.2004
Beiträge: 212
|
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! |
|
|
|
|
|
Nach oben #17 | |
|
Patrick Freitag
Registriert seit: 17.08.2005
Beiträge: 106
|
Zitat:
|
|
|
|