繁体   English   中英

jQuery转PHP,然后再次返回!

[英]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格式

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

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

的PHP

在php端,您将收到一个页面请求,并使用附加的参数来决定如何处理该页面。 对于JSON应用程序,这意味着将数据加载到数组中,然后json_encode()函数完成将数组转换为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");

因此,在这里,一个带有参数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.namedata.time在此函数中起作用的唯一原因是因为我们在第四个参数中指定json为返回类型。

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

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

顺便说一句,您的请求看起来是幂等的,因此请考虑使用GET而不是POST

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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