Sende php til javascript fil

En tråd i 'Javascript/Ajax' startet av kongen, 25 Mar 2015.

  1. kongen

    kongen kongemedlem

    Innlegg:
    2.723
    For å rydde opp i koden så vil jeg plassere alt av javascript i egne filer. I den orginle filen så er det denne koden.

    PHP:
    <p id="land"></p>

    // php
    $land = 'Norge';

    // javascript
    var land = '<?php echo $land ?>';
    document.getElementById("land").innerHTML = land;
    Jeg vil flytte denne delen av koden

    PHP:
    var land = '<?php echo $land ?>';
    document.getElementById("land").innerHTML = land;
    til en fil som heter land.js i mappen "filer" og hente den inn til hovedfilen med

    PHP:
    <script type="text/javascript" src="filer/land.js">
    men hvordan får jeg sendt $land (Norge) til variablen i .js filen?
     
    Sist redigert: 25 Mar 2015
  2. BlitZz

    BlitZz Member

    Innlegg:
    76
    Hvorfor blande php og javascript når du kan gjøre alt i en av de?

    Du kan gjøre dette i javascript:
    Kode:
    var land = 'Norge';
    document.getElementById("land").innerHTML = land;
    Du kan jo også bruke jquery global var:
    Kode:
    $land= "Norge";
    //...
    Og deretter hente den globale variabelen i den andre js filen og poste det i htmlen din slik:
    Kode:
    $( "#land" ).text( $land );
    Eller misforstår jeg deg?:confused:
     
    Sist redigert: 25 Mar 2015
  3. kongen

    kongen kongemedlem

    Innlegg:
    2.723
    $land får verdien sin fra ekstern fil med php file_get_contents. Bruker ikke jquery, men 'ren' javascript.
     
  4. BlitZz

    BlitZz Member

    Innlegg:
    76
    Ok, etter litt googling fant jeg ut at den beste måten for å hente en php variabel til javascript er med ajax. Det eneste som suger litt er at det er litt delay.

    Her er koden jeg skrapet sammen fra stackoverflow:

    Index.html:
    HTML:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <script src="ajax.js"></script>
    </head>
    
    <body>
        <h1>land</h1>
        <p id="land1"></p>
        <p id="land2"></p>
    </body>
    
    </html>
    Ajax.js:
    Kode:
    function loadXMLDoc() {
        var xmlhttp;
    
        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    
        xmlhttp.onreadystatechange = function(data) {
            if (xmlhttp.readyState == 4 ) {
               if(xmlhttp.status == 200){
                  
                   var data = JSON.parse(xmlhttp.responseText);
                   document.getElementById("land1").innerHTML = data.land1;
                   document.getElementById("land2").innerHTML = data.land2;
               }
               else if(xmlhttp.status == 400) {
                  alert('There was an error 400')
               }
               else {
                   alert('something else other than 200 was returned')
               }
            }
        }
    
        xmlhttp.open("GET", "land.php", true);
        xmlhttp.send();
    }
    
    loadXMLDoc();
    Land.php:
    PHP:
    <?php
    $land 
    = array(
        
    'land1' => 'Norge',
        
    'land2' => 'Danmark',
    );

    echo 
    json_encode($land);
    ?>

    Håper dette fungerer!
     
    Sist redigert: 26 Mar 2015
  5. adeneo

    adeneo Medlem

    Innlegg:
    1.609
    Dersom du bare trenger $land når siden først laster, så er det to måter å gjøre det på.

    Du kan enten sette opp PHP parseren til å også parse .js filer, men det er ingen god løsning ettersom caching av javascript filene ikke blir mulig, eller du kan bare legge $land i hovedfilen din som parses av PHP og hente den med javascript.
    PHP:
    <script type="text/javascript">
        var land = "<?php echo $land ?>";
    </script>
    <script type="text/javascript" src="filer/land.js">
    variabelen land vil være tilgjengelig i land.js ettersom den er i et høyere scope, i dette tilfellet vil den være global.
    Det finnes forøvrig ingenting som heter "jquery global var", dollartegnet betyr ingenting spesielt i javascript, men uten "var" foran vil en variabel automatisk være global, uansett om den har et dollartegn eller ikke.

    Du kan selvfølgelig bruke ajax i stedet for file_get_contents til å hente innholdet i lokale filer, eller til å hente $land etter at siden først har lastet osv.
     
    Sist redigert: 26 Mar 2015
    kongen og BlitZz liker dette.
  6. kongen

    kongen kongemedlem

    Innlegg:
    2.723
    Takk :)

    adeneo sin versjon fungerer perfekt. Scope var et nytt ord. Lærer noe hver dag.

    Er ajax egentlig veldig tregt? Jeg prøvde å sende noe med ajax og det tar lang tid før siden får svar tilbake.
     
  7. BlitZz

    BlitZz Member

    Innlegg:
    76
    Misforsto deg litt da. Trodde du ikke ville ha inline code... Da fungerer jo selvfølgelig adeneo sin mye bedre! :)

    Nei, ajax er ikke så tregt. Det kan være flere årsaker til at det går tregt. Men selvfølgelig, du sender jo forespørsler så om du for eksempel har en treg server vil det jo være en del forsinkelser. ;)
     
    Sist redigert: 27 Mar 2015

Del denne siden