Du ska inte ha citationstecken runt xmlhttp.responseText.
...
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
test = xmlhttp.responseText;
document.getElementById("list").innerHTML=test;
}
...
mvh
14 svar · 1 379 visningar · startad av kimmy
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);
Du ska inte ha citationstecken runt xmlhttp.responseText.
...
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
test = xmlhttp.responseText;
document.getElementById("list").innerHTML=test;
}
...
mvh
Just det, testade bara om det fungerade med, glömde plocka bort dem.
Men de fungerar inte utan heller. :(
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)
...
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);
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/
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.
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);
});
}
echo date() i din modul_getdate.php fil
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å?
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?
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.
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)
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 :)