[英]jQuery to PHP and back again!
我想将内容从PHP来回传递给jQuery,反之亦然。 我不确定我是否完全了解解决此问题的最佳方法,并希望获得一些最佳建议和说明。
以下是我尝试执行的操作的示例。 PHP将文件列出在目录中(其路径是从jQuery传递给它的),将它们存储在数组中,然后将它们传递回jQuery。 我想将数组中的值用于各种目的,但实际上我只是想了解两者之间来回传递的信息,无论是从数组中获取的信息,还是仅仅是普通变量。 谢谢!
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是一种以字符串格式表示数据集合的简单方法,人类和计算机都非常容易读取。 您可以在http://www.json.org/上获得完整的描述,但基本上可以归结为:
{
和}
字符括起来 string : value
,其中string
用作参考标签 string
的格式为"
,然后是除/
或"
以外的任何Unicode字符,然后加上另一个引号 value
可以是另一个字符串,数字,完整的数据对象,布尔值或上述值的某些集合的数组 [
,然后是逗号分隔的值列表,然后是]
在php端,您将收到一个页面请求,并使用附加的参数来决定如何处理该页面。 对于JSON应用程序,这意味着将数据加载到数组中,然后json_encode()
函数完成将数组转换为JSON格式的工作。 如果您手动将JSON创建为字符串,则该应用程序的其余部分将完全相同,尽管显然,这将使您在PHP代码中进行更多工作。 因此,辅助功能:)
在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");
因此,在这里,一个带有参数func="getNameAndTime"
的ajax请求被发送到test.php,PHP使用该参数来确定它应该返回{"name":"John", "time":"10:05am"}
形式{"name":"John", "time":"10:05am"}
的json编码的集合{"name":"John", "time":"10:05am"}
,然后响应到达为第一个alert()指定的函数,该函数的值为“ John”,然后记录为“ 10:05 am”。 同样, data.name
和data.time
在此函数中起作用的唯一原因是因为我们在第四个参数中指定json为返回类型。
除了jQuery中的这一行外,代码是正确的:
$.post("php.php", {dir: 'path/to/directory/'},
顺便说一句,您的请求看起来是幂等的,因此请考虑使用GET
而不是POST
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.