Вызовите php из javascript и верните массив из php в функцию Javascript

Я хочу написать функцию в javascript, которая вызовет Getfilename.php и Get $ filesArray, который возвращается в javascript.

GetFilenme.php – это еще один файл, и я пытаюсь получить доступ к нему из Config.html

PHP: Getfilename.php

<?php $dir = 'uploads/'; $dir = $_REQUEST['dir'] ; $filesArray = array(); $Counter = 0; $files = scandir($dir); foreach ($files as &$file) { if ($file!='.' && $file!='..' ) { $filesArray[$Counter] = $file; echo $filesArray[$Counter].'<br>'; $Counter = $Counter + 1; } } return $filesArray; ?> 

Related of "Вызовите php из javascript и верните массив из php в функцию Javascript"

Это предполагает, что вы загружаете и включаете javascript-библиотеку jQuery:

 $(function() { $.get('getfilename.php', { dir : 'path/to/dir' }, function(data) { // you should now have a json encoded PHP array $.each(data, function(key, val) { alert('index ' + key + ' points to file ' + val); }); }, 'json'); }); 

Это должен быть ваш PHP (хотя и очень небезопасный):

 <?php $dir = $_REQUEST['dir'] ; $filesArray = array(); $Counter = 0; $files = scandir($dir); foreach ($files as &$file) { if ($file!='.' && $file!='..' ) { $filesArray[$Counter] = $file; echo $filesArray[$Counter].''; $Counter++; } } echo json_encode($filesArray); ?> 

Используйте асинхронный HTTP-запрос в JavaScript для загрузки вывода PHP-скрипта.

Например, используя Ajax.Request в структуре прототипа , скажем, что у вас есть элемент HTML с id="notice" и вы хотите обновить его на основе вывода скрипта (простая строка «true» или «false»).

 new Ajax.Request('/validate.php', { method: 'get', onSuccess: function(transport) { var notice = $('notice'); if (transport.responseText == 'true') notice.update('Validation successful'); else notice.update('Validation failed'); } }); 
 function GetXmlHttpObject() { if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari return new XMLHttpRequest(); } if (window.ActiveXObject) { // code for IE6, IE5 return new ActiveXObject("Microsoft.XMLHTTP"); } return null; } function CallSomePHP(username, password) { xmlhttp=GetXmlHttpObject(); if (xmlhttp==null) { alert ("Browser does not support HTTP Request"); return; } var url="myPhp.php"; url = url+"?username="+username+"&password="+password; xmlhttp.onreadystatechange=stateChanged; xmlhttp.open("GET",url,true); xmlhttp.send(null); } function stateChanged() { if (xmlhttp.readyState==4) { alert(xmlhttp.responseText); // this will alert "true"; } } 

myphp.php

 <? // Get the values of username and password $username = $_GET['username']; $password = $_GET['password']; echo"true"; ?> 

Вы должны попробовать JQuery. Я отправляю и получаю от JS на PHP следующим образом, считая, что это форма.

 <div id="form"> <input type="text" id="email" /><br /> <button id="submit">Submit</button> </div> <div id="response"> </div> <!-- load jquery --> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript" > </script> 

 // put this in script type="text/javascript" tags $(document).ready(function(){ var emailValue; $("#submit").click(function(){ // when the user clicks the submit button // get the value of email and put it in the variable we made above emailValue=$("#email").val(); /* am going to send a post variable called "email" * with the value of "emailValue" to a script called receiver.php */ $.post('receiver.php',{email:emailValue},function(e){ // "e" is variable that contains the echoed string // check if it's true or false if(e=="true") alert ("valid email"); else alert("invalid email"); }); }); }); 

receiver.php

 $email=$_POST['email']; // checkMail is a fictional function that returns a bool $valid=checkMail($email); if($valid) { // email is valid echo "true"; }else{ // email is invalid echo "false"; } 

Примечание: если вы не отправляете данные в PHP-скрипт, вы должны использовать $.get вместо $.post , это немного быстрее.

Вы также можете использовать переменную JavaScript e и загрузить ее содержимое в разделе response в своей форме, как это

 $("#response").html(e); 

Это будет сделано так же, как если бы вы использовали функцию load() JQuery, как указано ниже в Coder.

В конце, сделайте следующее:

 print json_encode($filesArray); 

и он отправит обратно json-объект, который Javascript может легко прочитать.

Если вы используете JavaScript, возможно, самым простым решением является включение этого <script> .

например:

 <script src="Getfilename.php" type="text/javascript"></script> 

Затем в вашем PHP вместо:

 return $filesArray; 

попросите его написать JavaScript.

 echo "var result = ".json_encode($filesArray).";"; 

Ваше значение $ filesArray теперь будет в вашем javascript как result переменной.

 <script>alert(result)</script> 

PHP должен храниться на удаленном сервере и вызываться с использованием HTTP-запроса с использованием скрипта. Прочтите на AJAX подробную информацию о том, как это работает и как выполнять такие задачи.

Вы не можете просто сделать это в браузере, поскольку JavaScript не имеет интерпретатора PHP и не делает большинство браузеров, и поэтому не может просто запускать PHP-файл для получения вывода.

Если вы не используете фреймворк javascript, например jquery или прототип, вам придется создать объект XMLHttpRequest, который, как правило, будет зависеть от структуры javascript. Что-то вроде следующего:

 function GetHttpObject() { if (typeof XMLHttpRequest != 'undefined') return new XMLHttpRequest(); try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } return false; } 

Вы можете легко получить его с помощью ajax. Даже вы можете использовать Jquery для публикации значения php и получения ответа ajax в одной строке кода, как показано ниже.

 p['value']=2;//some input value to be posted $('#data').load('http://example.com/validator.php',p,function(str){} ); 

HTML:

 <div id="data"> </div> 

В этом фрагменте кода вы отправляете p ['value'] как 2 в validator.php и получаете ответ и загружаете это значение в div данных на той же странице.

В нашем php-коде // получаем опубликованное значение в некоторое значение $ и

 if($value==2) echo 'true I got 2' else echo 'I didnot got 2 You posted wrong value'; 

Это будет верно, я получил 2 в div #data. Это может быть не ваше точное требование, а очень полезное.