2016-09-15 7 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. Предполагается изменить элемент p с идентификатором «demo» на строку «черничный пирог»

Любая идея, что я делаю неправильно здесь?

EDIT

теперь он работает за исключением одной вещи, я не могу передать объект 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

обновите свой полный код.html + php + javascript. –

+2

Вам необходимо передать 'details' как' arguments' как 'myFunction (подробности)' – Saty

+1

PHP-серверы не интерпретируют PHP-код в файлах с расширением '.js' по умолчанию. если вы измените имя файла сценария на 'script.php', будет выполнен код PHP. –

ответ

1

вещей, чтобы рассмотреть: -

1.External JS не будет работать, как вы пытались.

2.Когда вы вызываете функцию javascript напрямую через код onclick, тогда вам необходимо передать данные и для дальнейшей работы.

Рабочий пример кода: -

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 проверить мой текущий код. Я взял ваш образец кода и изменил его. используйте его –

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> 

или б) объявить глобальную переменную на странице 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

Это должно работать отлично:

С In-Document 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-операции. Посмотрите, как это делается здесь. Вы создаете переменную Javascript: 'details' в глобальном масштабе, а затем вы можете получить к ней доступ из любого другого скрипта, такого как' script.js' ... но определение 'details' не должно быть во внешнем файле. ,(*** доступ только в тех файлах, которые не были объявлены с использованием php ***) – Poiz

1

Encode объект JSON с помощью json_encode, что

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

Удалите кавычки PHP, чувак. Вы назначаете строку вместо значения переменной php.

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

Это присвоит фактическое $cookie значение вместо строки '<? php echo $cookie; ?>'.

+0

Я попытался удалить их, но это заставляет мой JS-файл вообще не исполняться. – lolzDoe

+0

А ... ну, вы не можете использовать js и php внутри файла с расширением .js. Вы можете поместить эту часть кода внутри вашего index.php и внутри '' тег. Php выполнит на сервере и заменит значение $ cookie, и js будет иметь значение, готовое при запуске в браузере. – Azamantes

1

PHP-скрипт запускается на стороне сервера, а javascript запускается на стороне клиента, а два не имеют какой-либо области.

Другими словами, переменной $cookie присваивается значение в php, но оно не используется. Затем вы используете переменную в своем javascript с тем же именем (но полностью не связанным с переменной php), но поскольку она никогда не назначается ничем, это undefined.

gavgrif предлагает некоторые решения для устранения этого.