jQuery到PHP又回来了!

我想将内容从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"); }); }); 

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

JSON

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

  • 数据由{}字符括起来
  • data的格式为string : value ,其中string充当引用标签
  • string的格式为" ,后跟任何unicode char除了/" ,后跟另一个引号
  • 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()调用的第四个参数是data-type。 它不是必需的,但是如果你想要将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用它来确定它应该返回一个json编码的forms{"name":"John", "time":"10:05am"}集合{"name":"John", "time":"10:05am"} ,然后响应达到指定给第一个alert()的函数,值为“John”,然后记录“10:05 am”。 同样, data.namedata.time在此函数中工作的唯一原因是因为我们指定json是第四个参数中的返回类型。

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

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

顺便说一句,看起来你的请求是幂等的,所以考虑使用GET而不是POST