jQuery到PHP又回来了!

时间:2010-08-09 23:49:55

标签: php jquery ajax

我想将内容从PHP传递到jQuery,反之亦然。我不确定我是否完全明白了解决这个问题的最佳方法,并希望得到一些最好的建议和澄清。

以下是我正在尝试做的事情的一个例子。 PHP列出目录中的文件(其路径从jQuery传递给它),将它们存储在一个数组中,然后将它们传递回jQuery。我想在各种目的中使用该数组中的值,但实际上我只想了解两者之间来回传递信息,从数组中获取信息,或者仅仅是一个普通变量。 Merci beaucoup!

PHP:
    

$files = array();
$dir = ($_POST['dir']);
$count = 0;

if ($handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && strpos($file, '.jpg',1)) {$count++;
            $files[$file] = $file;
        }
    }
    closedir($handle);
}
    echo json_encode($files);
?>

jQuery:

$(document).ready(function(){

    $('a').click( function(e) {
        e.preventDefault();

        $.post("php.php", 'path/to/directory/',
            function(data) {
                alert(data);
        }, "json");
    });

});

2 个答案:

答案 0 :(得分:4)

如果我正确地阅读了您的问题,那么您并不是真的在寻找有关此特定代码的提示,而是更多关于在PHP和jQuery之间来回传输数据的过程的评论。让我们简要地看一下JSON本身,然后看看通信的每一面。

JSON

JSON是一种以字符串格式表示数据集合的简单方法,人类和计算机都很容易阅读。你可以在http://www.json.org/获得完整的描述,但它基本上归结为:

  • 数据由{}个字符
  • 括起来
  • 数据的格式为string : value,其中string充当参考标签
  • string格式为",后跟除/"之外的任何unicode字符,后跟另一个引号
  • value可以是另一个字符串,数字,完整数据对象,布尔值或上述某些值的数组
  • 数组的格式为[,后跟逗号分隔的值列表,后跟]

PHP

在php端,您正在接收页面请求并使用附加的参数来决定如何处理页面。对于JSON应用程序,这意味着将数据加载到数组中,然后json_encode()函数执行grunt工作以将该数组转换为JSON格式。如果您手动将JSON创建为字符串,那么应用程序的其余部分将工作相同,但显然这将为您在PHP代码中做更多工作。因此辅助函数:)

的jQuery

在jQuery方面,对$.post()的调用发出AJAX请求,以从服务器检索页面。在这种情况下,您要向php.php发送请求。

$.post()调用中的第二组参数是参数集合,其中应包含{后跟逗号分隔的集合:标签,冒号,然后是值。指定所有参数后,使用}关闭集合。请注意,虽然这类似于JSON字符串,但它不是JSON。标签没有JSON所需的引号。但是,任何字符串值都需要引号。

$.post()调用的第三个参数是一个将自动应用于从页面请求接收的数据的函数。函数的结果会自动加载到您在函数定义中指定的任何变量中,并且您可以在函数中使用该数据,几乎可以随意使用。在您的示例中,您只是将数据发送到警告框,但您可以使用它做更多事情。您实际上可以将其解析为JSON集合,并根据JSON中的各个组件的内容执行各种操作(最终,这意味着您直接对原始php数组中的各个值执行操作)。

$.post()调用的第四个参数是数据类型。它不是必需的,但如果您想要将json集合作为一个字符串来访问,则需要使用它。有了它,您可以通过简单地包含"json"来指定要返回的数据类型是json。如果已完成此操作,则可以通过引用其标签直接在第三个参数函数中访问JSON集合的元素。

以下是完整JSON $.post()调用的示例:

$.post("test.php", { "func": "getNameAndTime" },
   function(data){
     alert(data.name); //pretend it's John
     console.log(data.time); //pretend it's 10:05am
   }, "json");

所以在这里,一个ajax请求被发送到test.php,参数为func="getNameAndTime",php用它来确定它应该返回一个形式为{"name":"John", "time":"10:05am"}的json编码集合,然后是响应达到指定给第一个alert()的函数,值为“John”,然后记录“10:05 am”。同样,data.namedata.time在此函数中工作的唯一原因是因为我们指定json是第四个参数中的返回类型。

答案 1 :(得分:2)

代码是正确的,除了jQuery中的这一行:

        $.post("php.php", {dir: 'path/to/directory/'},

顺便说一下,您的请求似乎是幂等的,因此请考虑使用GET代替POST