从javascript调用php并从php返回一个数组到Javascript函数

时间:2009-10-20 12:55:01

标签: php javascript

我想在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;
?>

9 个答案:

答案 0 :(得分:4)

假设您下载并包含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); 
?>

答案 1 :(得分:2)

在JavaScript中使用异步HTTP请求来加载PHP脚本的输出。

例如,使用Prototype框架的Ajax.Request,假设您有一个带有id="notice"的HTML元素,并且您希望根据脚本的输出更新它(一个简单的“true”或“假”字符串)。

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');
  }
});

答案 2 :(得分:2)

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";
?>

答案 3 :(得分:1)

你应该尝试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);

这将完成同样的事情,就像你使用JQuery的load()函数一样,如下面的Coder提到的那样。

答案 4 :(得分:0)

最后,请执行以下操作:

print json_encode($filesArray);

它会发回一个json对象,Javascript可以轻松读取。

答案 5 :(得分:0)

如果您只是使用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>

答案 6 :(得分:0)

PHP应存储在远程服务器上,并使用脚本化HTTP请求进行调用。阅读AJAX,了解其工作原理以及如何执行此类任务的详细信息。

你不能只在浏览器中这样做,因为JavaScript没有PHP解释器,大多数浏览器都没有,因此不能只运行PHP文件来获得输出。

答案 7 :(得分:0)

如果你没有使用像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;
}

答案 8 :(得分:0)

你可以通过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代码中 //将已发布的值转换为某个$ value 和

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

这将打印为true我在div #data中得到2。 这可能不是您的确切要求,但非常有用。