liljaMedlem sedan juli 20041 219 inlägg
Försöker komma igång lite med AJAX och tittar på lite olika lösningar. Nu hakade jag upp mig på en eval som jag tycker är väldigt skumm..
eval(method + '(\'\', result)');
Om jag kör samma sak i en alert() så blir resultatet t.ex.
checkName('', result)
vilket känns rätt men är fel då det ska se ut som
checkName('', 1)
där 1 är variabeln result:s värde.När jag kör min kod så funkar de klockrent. Kan någon förklara så man fattar vad som händer?
Alltså blir jag konfunderad när result fungerar som en variabel när den bör fungera som statisk text??
Jag har ett exempel på http://code.liljaonline.se/ajax/dmz.php
liljaMedlem sedan juli 20041 219 inlägg
De är skummt, har suttit och funderat på detta en bra stund nu och så kommer man på något strax efter man tryckt på skicka.
Är det möjligen så att jag snöar in mig för mycket på php-syntaxen. Om det finns något i en sträng innanför eval som har samma namn som en variabel så funkar den helt enkelt som en variabel?
Om det är så varför fungerar då inte
eval('method(\'\', result)');
nitro2k01Medlem sedan aug. 20037 630 inlägg
Du bör undvika att använda eval på det sättet så mycket du bara kan eftersom ditt returdata förr eller senare garanterat kommer att innehålla tecken som behöver escape'as som ' \ och radbrytning.
Jag föreslår en lösning där du enbart använder eval för att för att hämta en funktionsreferens, och sedan användar call för att kalla på metoden. För att göra det enkelt skickar jag i exemplet med funktionsparametrarna som en array, och dessutom kommer arrayens första element vara funktionsnamnet. Det är saker du får stå ut med så länge.
<script type="text/javascript">
function checkName(parametrar){
alert("Detta är den input servern fick: " + parametrar[1] + "\nDetta är svaret jag fick: " + parametrar[2])
}
function callSomething(name){
eval(name).call(this, arguments);
}
callSomething("checkName", "mininput", "minrespons")
</script>
liljaMedlem sedan juli 20041 219 inlägg
nitro2k01 skrev:
<script type="text/javascript">
function checkName(parametrar){
alert("Detta är den input servern fick: " + parametrar[1] + "\nDetta är svaret jag fick: " + parametrar[2])
}
function callSomething(name){
eval(name).call(this, arguments);
}
callSomething("checkName", "mininput", "minrespons")
</script>
Ja det där verkar ju fungera betydligt bättre. Men jag förstår inte riktigt hur du skickar parametrarna? Innehåller arguments alla argument i en javascript-funktion?? Kan du inte förklara vad som händer i callSomething() också? :) Resten förstår jag (tror jag i alla fall)...
colioneMedlem sedan juni 20013 386 inlägg
arguments är en array som innehåller alla parametrar som funktionen har tagit emot.
Här kan du läsa på lite om call()
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Function:call
liljaMedlem sedan juli 20041 219 inlägg
colione skrev:
Här kan du läsa på lite om call()
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Function:call
Ok, men jag fattar fortfarande inte alls vad this tillför i
eval(name).call(this, arguments);
nitro2k01Medlem sedan aug. 20037 630 inlägg
Det kallar på funktionen som det objektet man kallar den för refererar till, i detta fall eval(name).
Men du had lika gärna kunnat göra eval(name)(arguments); i detta fall.