[英]Call php from javascript and return an array from php to Javascript function
我想在javascript中编写一个函数,该函数将调用Getfilename.php并获取在javascript中返回的$ filesArray。
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;
?>
这是假设您下载并包含jQuery javascript库:
$(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);
?>
在JavaScript中使用异步HTTP请求来加载PHP脚本的输出。
例如,使用Prototype框架的Ajax.Request ,假设您有一个id="notice"
的HTML元素,并且您想根据脚本的输出(简单的“ 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);
这将完成与使用JQuery的load()
函数(如下面的Coder所述load()
一样的操作。
最后,执行以下操作:
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值现在将作为变量result
出现在您的javascript中。
<script>alert(result)</script>
PHP应该存储在远程服务器上,并使用脚本HTTP请求进行调用。 阅读有关AJAX的详细信息,了解其工作原理以及如何执行此类任务。
您不能只在浏览器中执行此操作,因为JavaScript没有PHP解释器,大多数浏览器也没有,因此不能仅运行PHP文件来获取输出。
如果您没有使用jquery或prototype这样的javascript框架,则必须自己创建一个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,并获得响应并将该值加载到同一页中的data div中。
在我们的PHP代码中//将发布的值转换为$ value并
if($value==2)
echo 'true I got 2'
else
echo 'I didnot got 2 You posted wrong value';
这将打印正确,我在div #data中得到了2。 这可能不是您的确切要求,但很有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.