Avatar billede bandersen2200 Nybegynder
31. juli 2011 - 19:55 Der er 22 kommentarer og
1 løsning

PHP array til Java Script


Hej

Jeg prøver at læse data fra en fil, nanobird.txt, i PHP og overføre 3 arrays fra PHP til Java Script. Data jeg indlæser ser ud som følgende:
3657234_3899171_3900084
-3882454_3656704_-3900094
3882850_3657135_3899640
3882319_-3656804_3899870
3882862_3657234_3899171
Min kode ser ud som følgende:

<?php
$handle = @fopen("http://myhomepage.dk/nanobird.txt", "r");
if (file_exists($handle)) {
    echo "The file $filename exists";
$i=0;

if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        echo "Number: ".$i." ". $buffer.'<br>';
        $array[$i] = split('_',$buffer);
        $x[$i]=$array[$i][0];
        $y[$i]=$array[$i][1];
        $z[$i]=$array[$i][2];
        //x y x       
        //echo "$Inserted: ". $result.'<br>';       
        $i++;
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }   
    fclose($handle);
    print_r($array);
    echo "$x: ".'<br>';
    print_r($x);
    echo "$y: ".'<br>';
    print_r($y);
    echo "$z: ".'<br>';
    print_r($z);
}   

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

$("input.dataUpdate").click(function () {
  var i ="<?php echo ($i); ?>";
//Make 3 arrays size of i
var x = new Array();
var y = new Array();
var z = new Array();
//Transfer array
x ="<?php echo ($x); ?>";
y ="<?php echo ($y); ?>";
z ="<?php echo ($z); ?>";

for(var i=0;i<x.length;i++){
document.write("<b>arr["+i+"] is </b>=>"+x[i]+"<br>");
}
for(var i=0;i<y.length;i++){
document.write("<b>arr["+i+"] is </b>=>"+y[i]+"<br>");
}
for(var i=0;i<z.length;i++){
document.write("<b>arr["+i+"] is </b>=>"+z[i]+"<br>");
}

});
</script>


Java Script output ser ud som følgende:
arr[0] is =>A
arr[1] is =>r
arr[2] is =>r
arr[3] is =>a
arr[4] is =>y
arr[0] is =>A
arr[1] is =>r
arr[2] is =>r
arr[3] is =>a
arr[4] is =>y
arr[0] is =>A
arr[1] is =>r
arr[2] is =>r
arr[3] is =>a
arr[4] is =>y
The Value of i: [5]

Er der nogen der ved hvad jeg gør galt i overførelsen af PHP arrayet til Java Script ?
Avatar billede majbom Novice
31. juli 2011 - 21:18 #1
nur du echo'er et array skriver den "Array" og ikke indholdet.

kig evt på print_r()
Avatar billede bandersen2200 Nybegynder
31. juli 2011 - 23:09 #2
Hej

Jeg har prøvet med print_r():  x ="<?php print_r($x); ?>";

Men så kører Java Scriptet ikke korrekt og udskiver ingen ting. Ved at debugge det i Chrome får jeg blot følgende fejl: Uncaught SyntaxError: Unexpected token ILLEGAL

Skal man oprette en speciel variabel i Java Script for at modtage sådan et array ?

Mvh
Benjamin
Avatar billede bandersen2200 Nybegynder
31. juli 2011 - 23:16 #3
Jeg har fundet et svar der minder om dette, men jeg forstår ikke hvordan de kan få det til at virke ? : http://www.eksperten.dk/spm/319740

Er der nogen der kan konvertere svaret til mit problem ? Er nybegynder til Java Script...
Avatar billede olebole Juniormester
01. august 2011 - 01:28 #4
<ole>

Det første, du bør gøre, er at tjekke kildekoden i browseren. Bliver der mon skrevet det ud, du forventer?

Et PHP-array skrives lettest ud som et JavaScript-array med json_encode:


<script type="text/javascript">

<?php
$arr = array('en', 'to', 'tre', 'fire', 'fem');
print 'var myJSarray = ' . json_encode($arr) . ';';
?>

alert(myJSarray[2]); // Returnerer 'tre'
</script


Prøv det, og tjek browserens kildekode. Tjek altid browserens kildekode, der udskrives dynamisk. Både når det gælder HTML, CSS og JavaScript  *o)

/mvh
</bole>
Avatar billede olebole Juniormester
01. august 2011 - 01:31 #5
- eller du kan bruge implode:


<script type="text/javascript">

<?php
$arr = array('en', 'to', 'tre', 'fire', 'fem');
print 'var myJSarray = ["' . implode('","', $arr) . '"];';
?>

alert(myJSarray[2]); // Returnerer 'tre'
</script>

Avatar billede olebole Juniormester
01. august 2011 - 01:33 #6
PS: Jeg fik ikke afsluttet JavaScript lukke-tagget i #4 (mangler sidste >). Gør det, hvis du afprøver koden  =)
Avatar billede bandersen2200 Nybegynder
02. august 2011 - 20:30 #7
Hej

Jeg har prøvet det du beskriver men når jeg så kører min efterfølgende JS kender den ikke længere det JS array som jeg har printet til ? Gemmes det ikke på siden ? Jeg har lavet mit kald som en funktion hvor jeg skal trykke på en knap, der så kører mit efterfølgende JS funktioner der bruger det array jeg lige har skrevet til.
Avatar billede olebole Juniormester
02. august 2011 - 20:42 #8
PHP virker på serveren - JavaScript i browseren. Når først dokumentet har forladt serveren, kan PHP ikke længere nå det.

Skal du bruge data fra serveren uden at skifte dokumentet i browseren (via link eller form), må du bruge Ajax - en måde at tale med serveren på i baggrunden via XMLHttpRequest
Avatar billede bandersen2200 Nybegynder
02. august 2011 - 20:43 #9
Her er koden for siden:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css">
    <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="flot/jquery.js"></script>
    <script language="javascript" type="text/javascript" src="flot/jquery.flot.js"></script>
</head>
    <body>
<table1>
    <td
    <FORM>
    <INPUT TYPE="BUTTON" VALUE="Return" ONCLICK="window.location.href='index.php'" style="height:35px; width: 150px">
    </FORM>
    </td>
</table1>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px;"></div>

    <p>Reading from a TXT file to an Array in PHP. Press button to get data from array and show it on a Flot Graph</p>

<p>
      <input class="dataUpdate" type="button" value="Get Array">
    </p>
   

<?php
$arr = array('en', 'to', 'tre', 'fire', 'fem');
print 'var myJSarray = ' . json_encode($arr) . ';';

?>

<script type="text/javascript">

$("input.dataUpdate").click(function () {
  document.write("I am Here");

alert(myJSarray[2]);
});
</script>

</body>
</html>

Chrome giver følgende JS fejl : Uncaught ReferenceError: myJSarray is not defined
Avatar billede olebole Juniormester
02. august 2011 - 20:47 #10
Jeg er ikke sikker på, jeg forstår, hvad du skal bruge. Du kan godt udskrive et JavaScript array med PHP og efterfølgende bruge, mens siden ligger i browseren. Det gør du, som jeg viste ovenfor - og det virker, hvis du gør det rigtigt.

Hvis det er, hvad du ønsker, må du fortælle, hvad du fik ud af de sidste linjer, jeg skrev i #4. Hvis der bliver skrevet noget forkert ud, må du også få nogle JavaScript fejl
Avatar billede olebole Juniormester
02. august 2011 - 20:50 #11
Det er der ikke noget at sige til. document.write overskriver jo hele dokumentet - og så eksisterer arrayet ikke længere  *o)
Avatar billede bandersen2200 Nybegynder
02. august 2011 - 21:00 #12
Hej

Jeg har gjort scriptet mere simpelt:

<?php
$arr = array('en', 'to', 'tre', 'fire', 'fem');
print 'var myJSarray = ' . json_encode($arr) . ';';

?>

<script type="text/javascript">

  document.write("I am Here");

alert(myJSarray[2]);

</script>

Det hele udmunder i at jeg gerne vil bruge Flot: http://code.google.com/p/flot/
Til at tegne med og til det skal jeg køre det som Java Script med en funktion der minder om følgende: $.plot($("#placeholder"), [ d2 ]); hvor d2 er det array af tal der tegnes. Men for at jeg kan gøre dette skal jeg lige som have arrayet fra PHP først ?
Avatar billede bandersen2200 Nybegynder
02. august 2011 - 21:01 #13
Ovenstående giver følgende fejl: Uncaught ReferenceError: myJSarray is not defined
Avatar billede bandersen2200 Nybegynder
02. august 2011 - 21:02 #14
"Det er der ikke noget at sige til. document.write overskriver jo hele dokumentet - og så eksisterer arrayet ikke længere  *o)"

Okay så er jeg med, men er der en anden måde jeg kan udskive på, der ikke overskriver ?
Avatar billede bandersen2200 Nybegynder
02. august 2011 - 21:06 #15
Har prøvet følgende:

<?php
$arr = array('en', 'to', 'tre', 'fire', 'fem');
print 'var myJSarray = ' . json_encode($arr) . ';';

?>

<script type="text/javascript">

 
alert(myJSarray[2]);

</script>

Alert kender heller ikke myJSarray :(
Avatar billede majbom Novice
02. august 2011 - 21:08 #16
hvordan ser din kildekode ud (i browseren)?
Avatar billede bandersen2200 Nybegynder
02. august 2011 - 21:10 #17
Kildekode fra browseren:

var myJSarray = ["en","to","tre","fire","fem"];
<script type="text/javascript">

 
alert(myJSarray[2]);

</script>

Her er et link til siden jeg tester på: http://embeddedsolutions.dk/php/login2/TestReadTXTFlot.php
Avatar billede majbom Novice
02. august 2011 - 21:12 #18
din php-kode skal også være indenfor <script>-taggene
Avatar billede bandersen2200 Nybegynder
02. august 2011 - 21:29 #19
Sweet !!! Det virkede :)

Tak for hjælpen begge to, men det var vist splazz der knækkede den.
Avatar billede majbom Novice
02. august 2011 - 21:34 #20
arh - det var bare lige det sidste skridt - ole gjorde alt forarbejdet :)
Avatar billede olebole Juniormester
02. august 2011 - 21:40 #21
Selvtak, jeg samler ikke points, så dem napper splazz  *o)

En helt anden ting er, at jeg nu ville mene, den blev ret godt knækket i #4  =)
Avatar billede majbom Novice
02. august 2011 - 21:48 #22
jeg takker

der er i hvert fals ikke meget forskel på #4 og den sidste virkende stump kode :D
Avatar billede majbom Novice
02. august 2011 - 23:07 #23
tfp :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester