WN

WN (https://www.wn.se/forum/index.php)
-   Klientsidans teknologier, design och grafik (https://www.wn.se/forum/forumdisplay.php?f=12)
-   -   javascript hjälp? variabel problem! (https://www.wn.se/forum/showthread.php?t=1042127)

youheardit 2010-05-19 16:09

javascript hjälp? variabel problem!
 
Hejsan,

sitter med ett litet experiment och hoppar på ett jobbig fel.

Jag har en PHP fil som genererar tre variabler och blir en JS fil.
Kod:

var Title1 = "string1";
var Title2 = "string2";
var Title3 = "string3";

var Antal = 3; // antalet titlar!

och när jag ska hämta ut informationen i en html sida så blir den tom.

Kod:

<script type="text/javascript" src="titlar.php"></script>
</head>

<body>
<script type="text/javascript">

for(inits = 1; inits < Antal + 1; inits++){
       
        var theTitle = Title + inits.toString();
        document.write(); // ska skriva ut alla titlar i loop!
       
}
</script>

men när jag kör koden händer inget..

Är rätt så ny på javascript men vet var felet ligger men vet inte hur jag ska fixa lösningen. Hjälp tack?

Tacksam!

Jimpsson 2010-05-19 16:23

Varför använder du dig inte utav JSON?

youheardit 2010-05-19 16:29

Citat:

Ursprungligen postat av Jimpsson (Inlägg 20355942)
Varför använder du dig inte utav JSON?

hmm, har aldrig testat det på detta viset, använde det snabbt och enkelt när jag byggde ett Chrome plugin...

qson 2010-05-19 16:29

Citat:

Ursprungligen postat av youheardit (Inlägg 20355935)
Kod:

<script type="text/javascript" src="titlar.php"></script>
</head>

<body>
<script type="text/javascript">

for(inits = 1; inits < Antal + 1; inits++){
       
        var theTitle = Title + inits.toString();
        document.write(); // ska skriva ut alla titlar i loop!
       
}
</script>


Den här raden:
Kod:

var theTitle = Title + inits.toString();
Betyder följande:
Skapa en variabel med namnet theTitle. Sätt värdet på den lika med värdet på variabeln Title plus strängvärdet av variabeln inits.
Variabeln Title finns inte och värdet blir då "undefined".
theTitle kommer då få värdet "undefined1", "undefined2" och "undefined3";

På nästa rad i koden skriver du ut en tom sträng. Funktionen document.write tar ett argument (mellan paranteserna), nämligen vad det är den skall skriva ut.

Om du vill hämta variablerna på det sätt du beskriver kan man möjligen använda eval så man kan skapa ny JS-kod som körs. Det är absolut inte att rekommendera eftersom det kan tillåta besökaren att köra egen kod.

Jag föreslår att du gör titlarna till en array istället. Då kan du ha denna kod:
PHP-kod:

var Title = []; // Skapa en array
Title[1] = "string1";
Title[2] = "string2";
Title[3] = "string3";

var 
Antal Title.length// antalet titlar! (Varje array har en egenskap som heter length som talar om hur många värden som finns i arrayen) 

Sedan i din JS-kod har du följande:
Kod:

var theTitle = Title[inits];
Lycka till! :)



---

EDIT: Tycker det kan vara överkurs att använda JSON för denna informationen. Om du inte menade att han ska använda ett objekt för att lagra titlarna.

tartareandesire 2010-05-19 16:32

När du skriver Title så är det ett variabelnamn. Skriver du 'Title' så är det en sträng med värdet Title. Document.write skriver ut det som står inom parentesen, alltså i ditt fall ingenting.

Eftersom det är i JS felet ligger så flyttar jag till klientsidan.

youheardit 2010-05-19 16:55

qson: Tackar verkligen! mycket smartare lösning! Tack! :) allting funkade också som det skulle! tack återigen! :)

tartareandesire: Jo, satt själv och funderade vart jag skulle lägga tråden, men tack! :)

qson 2010-05-19 17:04

Kul att det hjälpte :p
Vill bara tillägga att egentligen börjar arrayer räkna sina index från 0. Dessutom behöver man inte ange index när man definerar den.

PHP-kod:

var Title = []; // Skapa en array
Title[] = "string1";
Title[] = "string2";
Title[] = "string3";

// Man kan också göra så här:
var Title = ["string1""string2""string3"];

// ... //

// Sedan för att loopa behöver man inte definera variabeln Antal eftersom du har antal titlar i Title.length.
// Tänk bara på att indexen börjar på 0 om man inte har valt nåt annat.

for(inits 0inits Title.lengthinits++){
    
       
/* ... */
    



youheardit 2010-05-19 17:39

Citat:

Ursprungligen postat av qson (Inlägg 20355950)
Kul att det hjälpte :p
Vill bara tillägga att egentligen börjar arrayer räkna sina index från 0. Dessutom behöver man inte ange index när man definerar den.

PHP-kod:

var Title = []; // Skapa en array
Title[] = "string1";
Title[] = "string2";
Title[] = "string3";

// Man kan också göra så här:
var Title = ["string1""string2""string3"];

// ... //

// Sedan för att loopa behöver man inte definera variabeln Antal eftersom du har antal titlar i Title.length.
// Tänk bara på att indexen börjar på 0 om man inte har valt nåt annat.

for(inits 0inits Title.lengthinits++){
    
       
/* ... */
    



jo tack! upptäckte det själv senare då jag fick "undefined" och då vet jag vad som är fel. :) tack ändå!

martine 2010-05-20 09:58

Citat:

Ursprungligen postat av Jimpsson (Inlägg 20355942)
Varför använder du dig inte utav JSON?

Jag fattar inte varför det alltid är någon som måste föreslå json, jquery, flash eller något annat i varje tråd där javascript kommer upp... På vilket sätt skulle JSON hjälpa i det här konkreta fallet?

youheardit: om du använder det qson föreslog så kan du dessutom använda bara document.write(Title.join("")); för att skriva ut hela array:en.

Jimpsson 2010-05-20 16:41

Citat:

Ursprungligen postat av martine (Inlägg 20356029)
Jag fattar inte varför det alltid är någon som måste föreslå json, jquery, flash eller något annat i varje tråd där javascript kommer upp... På vilket sätt skulle JSON hjälpa i det här konkreta fallet?

youheardit: om du använder det qson föreslog så kan du dessutom använda bara document.write(Title.join("")); för att skriva ut hela array:en.

Jag nämnde inte ens jQuery och flash skulle jag aldrig rekommendera för just detta, att ens ta upp flash tycker jag är lite väl irrelevant. Anledningen till att jag skrev JSON är eftersom det handlar om data från serversidan, JSON är lätthanterligt och enkelt att bygga på om man så vill.


Alla tider är GMT +2. Klockan är nu 14:27.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson