无法从PHP获得价值到Javascript

问题描述:

因此,在我的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.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

我试过你的第一个例子,但它打印出“” – lolzDoe

+0

@lolzDoe检查我的当前代码。我已将您的代码示例并将其更改。使用它 –

外部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

这应该很好地工作:

在-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

编码使用json_encode JSON对象,那就是

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

删除周围PHP的报价,伙计。您正在分配字符串而不是php变量值。

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

这将指定字符串'<? php echo $cookie; ?>'的实际$cookie值来代替。

+0

我试着删除它们,但这导致我的JS文件根本不能执行。 – lolzDoe

+0

嗯....嗯,你不能真正使用js和php内部的.js扩展名的文件。你可以将这部分代码放在你的index.php里面,并且在''标签内。 Php会在服务器上执行并替换$ cookie值,并且js在浏览器中执行时会有该值。 – Azamantes

php-script运行在服务器端,并且javascript运行在客户端,而两者不共享某种范围。

换句话说,$cookie变量在php中被分配了一个值,但它没有被使用。然后你在你的javascript中使用一个名称相同的变量(但与php变量完全无关),但由于它从来没有分配过任何东西,因此它是undefined

gavgrif提供了一些解决方案来解决这个问题。