Я хочу написать функцию в 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; ?>
Это предполагает, что вы загружаете и включаете 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"); }); }); });
$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. Это может быть не ваше точное требование, а очень полезное.