29. november 2006 - 17:54Der er
14 kommentarer og 1 løsning
AJAX standard skal merges sammen
Hej. Jeg sidder og roder med noget javascript som skal gette noget fra en side og returnere der hvor siden er, til det formål vil jeg bruge det der har stået om det på Mozillas side om ajax. Min kode ser således ud: function makeGo(url) { var http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari, ... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } }
if (!http_request) { alert('Giving up :( Cannot create an XMLHTTP instance'); //return false; } http_request.onreadystatechange = function() { alertContents(http_request); };
} function alertContents(http_request) { if (http_request.readyState == 4) { if (http_request.status == 200) { alert(http_request.responseText); } else { alert('There was a problem with the request.'); } } }
Men dette er til et meget specifikt "problem", jeg vil gerne have en funktion jeg kan kalde i mine andre funktioner og få klassen til at returnere http_request.responseText, er det muligt at merge de to klasser sammen så jeg kan bruge det som makeGo(url) returnerer i mine andre funktioner?
makeGo returnere nu ikke noget brugbart, men du kan lave lidt om i scriptet.
Før funktionen makeGo opretter du en global variabel: var sAjaxResponse = null;
Så ændrer du funktionen alertContents til:
function alertContents(http_request) { if (http_request.readyState == 4) { if (http_request.status == 200) { sAjaxResponse = http_request.responseText; } else { alert('There was a problem with the request.'); } } }
- og i makeGo retter du til:
function makeGo(url) { sAjaxResponse = null; var http_request = false; ... osv - osv ...
Så kan du altid i dine andre funktioner hive fat i sAjaxResponse:
function doDaShit() { if (sAjaxResponse) alert(sAjaxResponse); else alert("Der er ingen tilgængelig response-streng"); }
Mener du sådan her? function makeGo(url) { sAjaxResponse = null; var http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari, ... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } }
if (!http_request) { alert('Giving up :( Cannot create an XMLHTTP instance'); //return false; } http_request.onreadystatechange = function() { alertContents(http_request); };
http_request.open('GET', url, true); http_request.send(null); } function alertContents(http_request) { if (http_request.readyState == 4) { if (http_request.status == 200) { sAjaxResponse = http_request.responseText; } else { alert('There was a problem with the request.'); } } } function doDaShit() { makeGo('test.php'); if (sAjaxResponse) alert(sAjaxResponse); else alert("Der er ingen tilgængelig response-streng"); } Eller hvordan mener du jeg skal bruge det i mine funktioner?
sAjaxResponse = null; function makeGo(url) { var http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari, ... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } }
if (!http_request) { alert('Giving up :( Cannot create an XMLHTTP instance'); //return false; } http_request.onreadystatechange = function() { alertContents(http_request); };
http_request.open('GET', url, true); http_request.send(null); } function alertContents(http_request) { if (http_request.readyState == 4) { if (http_request.status == 200) { sAjaxResponse = http_request.responseText; } else { alert('There was a problem with the request.'); } } } function doDaShit() { if (sAjaxResponse) alert(sAjaxResponse); else alert("Der er ingen tilgængelig response-streng"); }
*LoL* ... det var bare en dårlig joke ;D Man kan altid kode noget anderledes - og med flere eller færre features - men din kode fejler ikke noget, som den er ;o)
Ja, jeg rettede dig tidligere (01/12-2006 13:19:52). Der er jo netop tale om asynkron komunikation med serveren - hvorfor du ikke har resultatet med det samme. Denne konstruktion virker med andre ord ikke:
function doDaShit() { makeGo('test.php'); if (sAjaxResponse) { alert(sAjaxResponse); } else { alert("Der er ingen tilg�ngelig response-streng"); } }
Først skal du afvikle makeGo - og på et senere tidspunkt kan du så bruge sAjaxResponse ;o)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.