webForumDet fria alternativet

returnerar undefined

JavaScript

3 svar · 390 visningar · startad av matkun

Medlem sedan maj 20062 inlägg
Frågan#1

Längst ner i processChange vill jag skriva ut värdet som kommer tillbaka från sendToServer i footext fältet..men det enda jag får ut är 'undefined'. (skriver jag ut det i sendToServer precis innan jag returnerar det så funkar det finfint). någon som förstår sånt här?

<html>
<head>
<script language="JavaScript">
function processChange(currentform, act, noden, funkt) {
         var url = "http://x.x.x.x/cgi-bin/ajaxmain";
 
        /* Temperature(1) and Dim(3) functionalities */
        if(funkt == 1 || funkt == 3){
                var inputStr = currentform.datafield.value;
 
                if(act == 'byfield'){
                        url += "?node=" + noden + "&function=" + funkt + "&action=" + act + "&val=" + inputStr;
                } else {
                        url += "?node=" + noden + "&function=" + funkt + "&action=" + act;
                }
 
                var inputInt = parseInt(inputStr);
 
                /* Plus button */
                if(act == 'plus'){
                        inputInt++;
                }
 
                /* Minus button */
                if(act == 'minus'){
                        inputInt--;
                }
 
                /* Typed in text field */
                if(act == 'byfield'){}
 
                /* ..And show the user.*/
                currentform.datafield.value = inputInt;
 
        } //end temperature-dim functionality
 
        /* ON/OFF(4) functionality */
        if(funkt == 4){
                var status = currentform.onoffstatus.value;
                url += "?node=" + noden + "&function=" + funkt + "&val=" + status;
 
                if(currentform.onoffstatus.value == 'ON'){     
                        currentform.onoff.value = "Turn on";   
                        currentform.onoffstatus.value = "OFF"; 
                } else { 
                        currentform.onoff.value = "Turn off";
                        currentform.onoffstatus.value = "ON";
                } 
        } //end ON/OFF functionality
 
        document.fooform.footext.value = sendToServer(url); 
} //end processChange
 

function sendToServer(url){ 
        var xmlObj = null;
 
        if(window.XMLHttpRequest){        /* The rest.. */
                xmlObj = new XMLHttpRequest();
        } else if(window.ActiveXObject){  /* M$IE */
                xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
        } else { 
                return -1; /* No AJAX support */
        } 
 
        xmlObj.onreadystatechange = function(){
                /* Process the server response */
                if(xmlObj.readyState == 4){
                        var str = xmlObj.responseXML.getElementsByTagName('data')[0].firstChild.data;
                        return str;      
                } //end readystate == 4                
        } //end onreadystatechange-function
 
        xmlObj.open("GET", url, true);
        xmlObj.setRequestHeader( "Content-Type" , "application/x-www-form-urlencoded; charset=iso-8859-1" );
        xmlObj.send("");
}// end sendToServer(url)
 
</script>
</head>
<body>
 
<form name="fooform">
<input type="text" name="footext" size="100" value="foo">
</form>
 
<form>
 <input type="text" name="onoffstatus" value="ON" size="1" disabled>
 <input id="xmlObjbuttononoff" type="button" name="onoff" value="Turn off" onClick="processChange(this.form, 'onoffchange', '1', '4')">
</form>
 
<form>
 <input id="xmlObjbuttontempminus" type="button" name="temp" value="-" onClick="processChange(this.form, 'minus', '2', '1')">
 <input type="text" name="datafield" value="23" size="1" onChange="processChange(this.form, 'byfield', '2', '1')">
 <input id="xmlObjbuttontempplus" type="button" name="temp" value="+" onClick="processChange(this.form, 'plus', '2', '1')">
</form>
</body>
</html>
Medlem sedan aug. 20039 340 inlägg
#2

Välkommen till webForum! Två tips: Lägg koden i kodtaggar. Och om något inlägg löser ditt problem, vänligen markera det som slutgiltigt accepterat.

sendToServer returnerar inget värde (Detta eftersom funktionen lämnas innan överföringen är färdig.) Det du får göra är att skapa en callback-funktion, som du sedan kallar på från onreadystatechange.

<html>
<head>
<script language="JavaScript">
function processChange(currentform, act, noden, funkt) {
var url = "http://x.x.x.x/cgi-bin/ajaxmain";

/* Temperature(1) and Dim(3) functionalities */
if(funkt == 1 || funkt == 3){
var inputStr = currentform.datafield.value;

if(act == 'byfield'){
url += "?node=" + noden + "&function=" + funkt + "&action=" + act + "&val=" + inputStr;
} else {
url += "?node=" + noden + "&function=" + funkt + "&action=" + act;
}

var inputInt = parseInt(inputStr);

/* Plus button */
if(act == 'plus'){
inputInt++;
}

/* Minus button */
if(act == 'minus'){
inputInt--;
}

/* Typed in text field */
if(act == 'byfield'){}

/* ..And show the user.*/
currentform.datafield.value = inputInt;

} //end temperature-dim functionality

/* ON/OFF(4) functionality */
if(funkt == 4){
var status = currentform.onoffstatus.value;
url += "?node=" + noden + "&function=" + funkt + "&val=" + status;

if(currentform.onoffstatus.value == 'ON'){
currentform.onoff.value = "Turn on";
currentform.onoffstatus.value = "OFF";
} else {
currentform.onoff.value = "Turn off";
currentform.onoffstatus.value = "ON";
}
} //end ON/OFF functionality

[b]textcallback=function(arg){
// Jag kommer att anropas så fort överföringen är färdig!
document.fooform.footext.value=arg;
}

sendToServer(url, textcallback);[/b]

} //end processChange

function sendToServer(url[b], tcallback[/b]){
var xmlObj = null[b], callback = tcallback[/b];

if(window.XMLHttpRequest){ /* The rest.. */
xmlObj = new XMLHttpRequest();
} else if(window.ActiveXObject){ /* M$IE */
xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
} else {
return -1; /* No AJAX support */
}

xmlObj.onreadystatechange = function(){
/* Process the server response */
if(xmlObj.readyState == 4){
var str = xmlObj.responseXML.getElementsByTagName('data')[0].firstChild.data;
[b]callback(str);[/b]
} //end readystate == 4
} //end onreadystatechange-function

xmlObj.open("GET", url, true);
xmlObj.setRequestHeader( "Content-Type" , "application/x-www-form-urlencoded; charset=iso-8859-1" );
xmlObj.send("");
}// end sendToServer(url)

</script>
</head>
<body>

<form name="fooform">
<input type="text" name="footext" size="100" value="foo">
</form>

<form>
<input type="text" name="onoffstatus" value="ON" size="1" disabled>
<input id="xmlObjbuttononoff" type="button" name="onoff" value="Turn off" onClick="processChange(this.form, 'onoffchange', '1', '4')">
</form>

<form>
<input id="xmlObjbuttontempminus" type="button" name="temp" value="-" onClick="processChange(this.form, 'minus', '2', '1')">
<input type="text" name="datafield" value="23" size="1" onChange="processChange(this.form, 'byfield', '2', '1')">
<input id="xmlObjbuttontempplus" type="button" name="temp" value="+" onClick="processChange(this.form, 'plus', '2', '1')">
</form>
</body>
</html>

KOden är bara testad i mitt huvud, men bör funka. Om den inte gör det så hoppas jag att du fattar principen iaf.

Medlem sedan maj 20062 inlägg
#3

Super, det funkar finfint! tack så mycket!

Medlem sedan aug. 20039 340 inlägg
#4

Varsågod! Och så hoppas jag såklart att du stannar på forumet även i fortsättningen!

260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)