2011-10-24 98 views
0

更新:謝謝大家幫助過的人。我希望這裏的無數解決方案可以作爲任何面臨類似困難的人的參考。通過PHP傳遞的Javascript值undefined

我正在閱讀從PHP的文本文件,我需要將字符串傳遞到JS進行操作。我嘗試了將PHP放到我的外部JS文件中的更直接的方式,但那不起作用,所以我正在使用一個空的div容器。但是,在JS中,我仍然收到一個未定義的值。該文件正確讀入div值,它只是不會傳遞給我的外部JavaScript文件。

HTML:

<?php 
    $world = file_get_contents('http://url.com/testworld.txt'); 
    //echo $world; 
?> 

<html> 

    <head> 
     <script src="http://code.jquery.com/jquery-latest.js"></script> 
     <script type="text/javascript" src="js/game.js"></script> 
    </head> 

    <body onload="init()"> 
     <canvas id="game" width="650" height="366" style="border: 2px solid black;"></canvas> 
     <br /> 
     <h1> Currently in development.</h1> 
     <br /> 
     <div id="world" value="<?php echo $world; ?>" /> 
    </body> 

</html> 

而且JS:

var world = document.getElementById('world').value; 

document.write(world); 

如果有一種方法,使剛剛從PHP拉動變量在外部JavaScript文件的工作,我寧願做那。

+0

所以我嘗試使用隱藏的輸入和textarea。我仍然在我定義JS變量的行上出現Chrome控制檯錯誤「無法讀取屬性值'(或'innerHTML')null」。這太奇怪了。 –

+0

請包括瀏覽器*查看的HTML *和*請包括相關的JAVASCRIPT * :-)錯誤是由'someNullExpression.innerHTML'引起的,*不能*是上述代碼的結果,因爲有沒有'innerHTML'。 – 2011-10-24 06:02:28

+0

我的意思是說,當我嘗試以下解決方案之一時,它會將我的'innerHTML'視爲null,這要求我從「值」更改爲「innerHTML」。上面的代碼幾乎是一切。 –

回答

1

這是很容易通過數據從PHP - > JS而不是將其隱藏在DOM中。 訣竅是json_encode()函數 - 它會將PHP字符串,數組等轉換爲有效的JavaScript格式。 請參見下面的例子中,固定起來:

<?php 
    $world = file_get_contents('http://url.com/testworld.txt'); 
?> 
<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    <script type="text/javascript" src="js/game.js"></script> 
</head> 
<body onload="init()"> 
    <script type="text/javascript"> 
     //World is defined here, and accessible to the javascript that runs on the page 
     var world = <?=json_encode($world)?>; 
    </script> 
    <canvas id="game" width="650" height="366" style="border: 2px solid black;"></canvas> 
    <br /> 
    <h1> Currently in development.</h1> 
    <br /> 
</body> 


我敢肯定你的煩惱是由於變量的作用域在JavaScript的工作方式發生。你這個簡單的例子必須工作:

<?php 
    $foo = "\"Hello world!\""; 
?> 
<html> 
<head> 
</head> 
<body> 
    <script type="text/javascript"> 
     var foo = <?=json_encode($foo)?>; 
     alert("The value of foo is: " + foo); 
    </script> 
</body> 
</html> 

所以在內嵌腳本的情況下,foo變量存在。也許如果你的代碼看起來像:

<script type="text/javascript"> 
    //Load the game world, and pass to the javascript lib 
    var world = <?=json_encode($world)?>; 
    loadWorld(world); 
</script> 

那麼你不必擔心這麼大的範圍?

+0

我在Javascript文件中收到「世界未定義」 –

+0

嘗試在JavaScript文件中定義'var world;',並使用'world = .. 。「在HTML中。 – MrTrick

+0

這有點更好,但它只是吐出「未定義」到文件內容應該去的頁面上。 –

0

將value屬性指定給div是沒有意義的。相反,一個div的使用隱藏的textarea元素,並把文件的內容,使用類似的內部:

<textarea id="fileContent" style="display:none"><?php echo $world; ?></textarea> 

,然後在JS:

document.getElementById('fileContent').value; 

將返回文本區內容

0

我不確定這一點,但它可能是2 $world變量處於不同的範圍。嘗試使用:

<html> 

    <head> 
     <script src="http://code.jquery.com/jquery-latest.js"></script> 
     <script type="text/javascript" src="js/game.js"></script> 
    </head> 

    <body onload="init()"> 
     <canvas id="game" width="650" height="366" style="border: 2px solid black;"></canvas> 
     <br /> 
     <h1> Currently in development.</h1> 
     <br /> 
     <div id="world" value="<?php echo file_get_contents('http://url.com/testworld.txt'); ?>" /> 
    </body> 

</html> 

,看看它是否工作

+0

謝謝,但它仍然說它無法在我的JS文件中讀取null屬性的'值'。這幾乎就好像我的外部文件完全不知道它被引用。 –

0

嘗試改變:

<div id="world" value="<?php echo $world; ?>" /> 

到:

<div id="world"><?php echo $world; ?></div> 

和變化:

getElementById('world').value; 

到:

getElementById('world').innerHTML; 

如果需要,你可以添加display: none;風格的div來隱藏它。

+0

仍在收到「無法讀取屬性'innerHTML'爲null」 –

1

value對DOM元素特殊的意義(它指的是文本框的值,等等)。相反,你可以使用一個HTML5 Data Attributedata-value,然後用document.getElementById('world').getAttribute('data-value');進行檢查。

然而,更好的方法是使用一個隱藏的輸入,如

<input type="hidden" id="world" value="<?php echo $world; ?>" /> 

,然後離開你的腳本是。

0

,而不是div標籤中指定的值,就應該在隱藏輸入字段的值。這是一個更好的辦法 這樣

<head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    <script type="text/javascript" src="js/game.js"></script> 
</head> 

<body onload="init()"> 
    <canvas id="game" width="650" height="366" style="border: 2px solid black;"></canvas> 
    <br /> 
    <h1> Currently in development.</h1> 
    <br /> 
    <input type="hidden" name="world" id="world" value="<?php echo $world;?>"/>   
</body> 

</html> 

你還應該指定表單標籤了。通過指定表單標籤,你可以有更多的方式來使用javascript訪問元素。

,如果你想使用DIV那麼就應該是這樣的..

<div id="world"><?php echo $world;?></div> 

在JS,你可以通過這個代碼訪問$世界..

var world = document.getElementById('world').innerHTML; 
1

另一種方式: 在你的PHP

<div id="world" data-world="<?php echo $world; ?>" /> 

在您的JS:

$('#world').attr('data-world'); 

你也可能要提出的是正確逃過被用作一個HTML $世界的肯定值屬性

+0

它只是吐出「未定義」一詞。 –