webForumDet fria alternativet

xmlhttp.responseText till variabel

JavaScriptur Javascript

14 svar · 1 379 visningar · startad av kimmy

Medlem sedan feb. 201312 inlägg
Frågan#1

Hej!

Jag har kört fast lite.

Jag använder mej av ajax för att försöka få tillbaka ett värde från ett php-script och sedan lägga det i ett JavaScript variabel.

Jag får ett värde tillbaka, för det visas i div-tagen som heter "list". (den koden ska bort sen)
Men vill som sagt ha in värdet i ett JavaScript variabel.

Här är koden. Vad är felet?

var test;

function load_program(date)

{
 if (window.XMLHttpRequest)
   {
   xmlhttp=new XMLHttpRequest();
   }
 else
   {
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.onreadystatechange=function()
   {
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
        test = "xmlhttp.responseText";
        document.getElementById("list").innerHTML=xmlhttp.responseText;
     }
   }
 xmlhttp.open("GET","modul/modul_getprogramid.php?program="+window.programnamn+"&date="+date,true);
 xmlhttp.send();
 
 alert (test);
Medlem sedan juni 200032 967 inlägg
#2

Du ska inte ha citationstecken runt xmlhttp.responseText.

...
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
        test = xmlhttp.responseText;
        document.getElementById("list").innerHTML=test;
     }
...

mvh

Medlem sedan feb. 201312 inlägg
#3

Just det, testade bara om det fungerade med, glömde plocka bort dem.
Men de fungerar inte utan heller. :(

Medlem sedan juni 200032 967 inlägg
#4

Jag tror att det kanske är scopet för din variabel som är fel - den lever nog bara i if-satsen. Prova att deklarera variabeln överst i funktionen:

function load_program(date)
{
 var test;
 if (window.XMLHttpRequest)
...
Medlem sedan feb. 201312 inlägg
#5

Testat det med. :/

Får ut texten "undefined" bara

Medlem sedan juni 200032 967 inlägg
#6

Jag ber om ursäkt - jag såg inte att du deklarerat variabeln allra överst.

Men när jag tänker efter beror det säkert på att det är xmlhttp.onreadystatechange som äger värdet - och eftersom ajax är asynkront försöker du nog använda värdet innan ajax-koden har körts färdigt och fyllt variabeln med värdet. För att kontrollera om så är fallet kan du testa med:

window.setTimeout("alert(test);", 1000);
Medlem sedan juni 20019 519 inlägg
#7

Du skriver att koden skall vara async så test kommer aldrig sättas till vad du vill:

function load_program(date) {
	var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
	var test;

	xmlhttp.onreadystatechange=function() {
		if (xmlhttp.readyState==4 && xmlhttp.status==200) {
			test = xmlhttp.responseText;
			document.getElementById("list").innerHTML = xmlhttp.responseText;
		}
	}
	xmlhttp.open("GET","modul/modul_getprogramid.php?program="+window.programnamn+"&date="+date, [b]false[/b]);
	xmlhttp.send();
	alert(test);
}

borde ge dig alert med rätt värde: http://voigt.se/sandbox/wf/ajax/

Medlem sedan maj 20012 237 inlägg
#8

Jag skulle kika på jQuery och dess ajax-support istället för att leka med XMLHttpRequest. Då slipper du även att behöva försöka få det att fungera med alla webbläsare.

Medlem sedan feb. 201312 inlägg
#9

Ja, de löste sig med de första svaret, men började snöa in mej lite på jquery vilket som va mycket lättare och framförallt mycket mindre kod.

Men jag måste vara en tomte, för jag fattar inte redigt här heller hur jag ska få in svaret i en variable??

Vill ha in ett datum som kommer tillbaka från php sidan in i en var?

function load_date(program) {
	
	$.get("modul/modul_getdate.php",{program:program},function(result){
		$("#load_dates").html(result);
	});
}
Medlem sedan juni 20019 519 inlägg
#10

echo date() i din modul_getdate.php fil

Medlem sedan feb. 201312 inlägg
#11

Jo, själva den delen fungerar. Jag får tillbaka ett värde i "result".
Men jag vill få in den i en variabel som går använda globalt.

Hur gör jag då?

Medlem sedan juni 20019 519 inlägg
#12

kolla in $.ajax metoden, du få ändra det till async till false, förstå dock inte varför du skall ha den globalt för du kommer inte direkt kunna använda den på ett globalt sätt, för om du aldrig kör din metod så kommer den globala variablen aldrig ändras, och om du använder variablen för att göra något annat så måste du ändå triggar den andra metoden som gör kanske din alert i ditt test. Jag hade gjort något i stil med: http://voigt.se/sandbox/wf/ajax/index2.html

Vad är det du vill göra med variablen? Varför skall den vara global?

Medlem sedan feb. 201312 inlägg
#13

Okey

Funktionen är att man ska kunna öppna en lista.
Först väljer man program, sen väljer man datum och när man har de två resultaten så ska man få fram ett program id.
Id:et vill jag sedan lägga i en variabel.

En funktion anropar då variabeln med id:et och öppnar listan för detta id.

Men vill också att andra funktioner ska kunna använda id:et, t.ex. när man ska lägga till nya rader i listan.

Sen kan program id:et ändras om man går tillbaka till startsidan och ändrar program eller datum.

Medlem sedan juni 20019 519 inlägg
#14

vad skall du ha programId till, du kommer vilja anropa en funktion för att få ut något mer ändå, så jag förstå inte alls varför du vill få ut den som en global variabel.

var publicID;
var load_date = function(program) {
	$.ajax("date.asp",{
		data: { "program": program },
		cache: false,
		async: false,
		success: function(data) {
			publicID = data;
		}
	});
};

är samma kod som den förra exemplet jag skrev (den utan jQuery)

Medlem sedan feb. 201312 inlägg
#15

Nu löste de sej. Tack!

Jag vill bara att andra JavaScript ska kunna använda sej av program id.
Detta för att slippa hela tiden att skicka program och datum för att få fram id, så gör man det en gång.

Men nu funkar det :)

139 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)