2016-09-15 151 views
2

因此,在我的PHP文件中,我創建了一個JSON對象,我需要獲取我的Javascript文件進行處理。我似乎卻無法轉移任何東西,甚至不是一個簡單的字符串是這樣的: -無法從PHP獲得價值到Javascript

的index.php

<?php 
    $cookie= "blueberry cake"; 
?>; 

的script.js

var details = "<?php echo $cookie; ?>"; 
    function myFunction() { 
     document.getElementById("demo").innerHTML = details; 
    } 

指數.html

<html> 

<head> 
    <script src="script.js"></script> 
    <title>antgus</title> 
</head> 
<body> 

    <h1>Welcome to my page! </h1> 

    <button type="button" onclick="myFunction()">Try it</button> 

    <p id="demo">A Paragraph.</p> 


</body> 

我在我的HTML中有一個按鈕,所以當我按下函數myFunction get的函數。它應該將id爲「demo」的p元素更改爲字符串「blueberry cake」

任何想法我在這裏做錯了嗎?

編輯

我現在有工作,除了一兩件事,我不能一個JSON對象傳遞給我的Javascript功能。控制檯拋出一個錯誤,指出參數是錯誤的,它認爲我傳遞了多個字符串。 的index.php

<?php 
    $test = "blue"; 
    $logLines = file('../../../home/shares/flower_hum/humid.log'); 
    $entries = array_map("clean",$logLines); 
    $finalOutput = [ 
     'humid' => $entries 
    ]; 
    function clean($string){ 
     return json_decode(rtrim(trim($string),','),true); 
    } 

    $json = json_encode($finalOutput, JSON_UNESCAPED_SLASHES); 
    echo $json; //displays valid JSON, I have checked it. 
?> 

<html> 
    <head> 
     <script src="script.js"></script> 
     <title>antgus</title> 
    </head> 
    <body> 
     <p>Welcome to my page! Down below you can see the data:</p> 
     <button type="button" onclick='myFunction("<?php echo $json ?>")'>Try it</button> 
     <p id="demo">A Paragraph.</p> 
    </body> 
</html> 

的script.js

function myFunction(jsonObject) { 
    document.getElementById("demo").innerHTML = "INCOMING DATA:"; 
    alert(jsonObject); 
} 
    enter code here 
+0

更新您的完整code.html + php + javascript。 –

+2

您需要將'details'作爲參數傳遞給'myFunction(details)' – Saty

+1

PHP服務器在默認情況下不會解釋擴展名爲'.js'的PHP代碼。如果您將腳本文件的名稱更改爲'script.php',則PHP代碼將被執行。 –

回答

1

需要考慮的事情: - 你嘗試過

1.External JS將無法正常工作。

2.當您通過onclick代碼直接調用javascript函數時,則必須傳遞數據以進一步工作。

的工作代碼示例: -

的index.php: -

<?php 
    $cookie= "blueberry cake"; 
?> 
<html> 

<head> 
    <script src="script.js"></script> 
    <title>antgus</title> 
</head> 
<body> 
<h1>Welcome to my page! </h1> 

<button type="button" onclick='myFunction("<?php echo $cookie; ?>")'>Try it</button> 

<p id="demo">A Paragraph.</p> 

的script.js: -

function myFunction(details) { 
    document.getElementById("demo").innerHTML = details; 
} 

輸出在我的地方結束: -

前點擊: - http://prntscr.com/ci94s9

後點擊: - http://prntscr.com/ci94w9

+0

所以我應該在同一個文件中有HTML,JS和PHP?這不是很混亂嗎? – lolzDoe

+0

我試過你的第一個例子,但它打印出「<?php echo $ cookie;?>」 – lolzDoe

+0

@lolzDoe檢查我的當前代碼。我已將您的代碼示例並將其更改。使用它 –

1

外部JS文件不會被解析爲PHP的意思是,你不能訪問該變量。你可以將你的js保存爲php(不推薦)。可替換地)

包括在PHP頁面的底部的底部該函數:

<?php 
    $cookie= "blueberry cake"; 
?>; 
    //js further down the same page 
    <script> 
    var details = "<?php echo $cookie; ?>"; 
    function myFunction() { 
     document.getElementById("demo").innerHTML = details; 
    } 
</script> 

或b)宣佈在PHP頁面一個全局變量,使得外部JS可以訪問它:

//php page 
    <?php 
     $cookie= "blueberry cake"; 
    ?>; 
<script> var details = "<?php echo $cookie; ?>";</script> 


//js file 
     function myFunction() { 
      //details will be accessible since it has been declared in the global space of the index.php page 
      document.getElementById("demo").innerHTML = details; 
     } 
+0

我試過你的第二個例子,但它似乎沒有做任何事情。 – lolzDoe

1

這應該很好地工作:

在-js文件:

<?php 
    $cookie= "blueberry cake"; 
?>; 

<html> 

    <head> 
     <script type="text/javascript"> 
      var details = "<?php echo $cookie; ?>"; 
      function myFunction() { 
       document.getElementById("demo").innerHTML = details; 
      } 
     </script> 
     <title>antgus</title> 
    </head> 
    <body> 

     <h1>Welcome to my page!</h1> 
     <button type="button" onclick="myFunction()">Try it</button> 
     <p id="demo">A Paragraph.</p> 
    </body> 

隨着外部JS:

<?php 
    $cookie= "blueberry cake"; 
?>; 

<html> 

    <head> 
     <script type="text/javascript"> 
      var details = "<?php echo $cookie; ?>"; 
     </script> 
     <script type="text/javascript" src="script.js"> </script> 
     <title>antgus</title> 
    </head> 
    <body> 

     <h1>Welcome to my page!</h1> 
     <button type="button" onclick="myFunction()">Try it</button> 
     <p id="demo">A Paragraph.</p> 
    </body> 

腳本。js文件:

function myFunction() { 
     // HAS ACCESS TO details WHICH IS ON THE GLOBAL SCOPE 
     document.getElementById("demo").innerHTML = details; 
    } 
+0

這不起作用。不知道爲什麼,我把所有的文件放在同一個文件夾中。我嘗試了內聯js和外部。 – lolzDoe

+0

@loizDoe你的問題是'script.js'文件。你不能在那裏做PHP操作。看看它是如何完成的。你可以在Global Scope中創建一個Javascript變量:'details',然後你可以從'script.js'之類的任何其他腳本中訪問它......但是'details'的定義不應該在外部文件中。 。(***只訪問那些未聲明使用PHP ***的文件) – Poiz

1

編碼使用json_encode JSON對象,那就是

<script> var details = "<?php echo json_encode($cookie); ?>";</script> 
1

刪除周圍PHP的報價,夥計。您正在分配字符串而不是php變量值。

var details = "'" + <?php echo $cookie; ?> + "'"; 

這將指定字符串'<? php echo $cookie; ?>'的實際$cookie值來代替。

+0

我試着刪除它們,但這導致我的JS文件根本不能執行。 – lolzDoe

+0

嗯....嗯,你不能真正使用js和php內部的.js擴展名的文件。你可以將這部分代碼放在你的index.php裏面,並且在''標籤內。 Php會在服務器上執行並替換$ cookie值,並且js在瀏覽器中執行時會有該值。 – Azamantes

1

php-script運行在服務器端,並且javascript運行在客戶端,而兩者不共享某種範圍。

換句話說,$cookie變量在php中被分配了一個值,但它沒有被使用。然後你在你的javascript中使用一個名稱相同的變量(但與php變量完全無關),但由於它從來沒有分配過任何東西,因此它是undefined

gavgrif提供了一些解決方案來解決這個問題。