webForumDet fria alternativet

returnerar undefined

3 svar · 390 visningar · startad av matkun

matkunMedlem sedan maj 20062 inlägg
#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>
nitro2k01Medlem sedan aug. 20037 630 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.

matkunMedlem sedan maj 20062 inlägg
#3

Super, det funkar finfint! tack så mycket!

nitro2k01Medlem sedan aug. 20037 630 inlägg
#4

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

Genererad på 380 ms · cache AV · v20260730165559-full.f96bc7eb