繁体   English   中英

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

[英]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");
    });

  });

});

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所述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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM