0

我正在做一个到处都是的项目。我的显示文件是 index.php。从那里我通过 jquery 调用 ajax 函数,然后调用 php 文件从 mysql 表中获取和接收用户数据。php 函数将一些数据保存到 php 会话变量中,有时只是将数据返回给 ajax。

我对 ajax、php 和大部分会话都很陌生,我发现我制作文件路径的方式可能有问题......例如,我发现有时使用完整的 URL 文件路径而不是只是 /functions/updateUser.php 可以打破链接!

所以我的问题是,服务器究竟是如何通过 php 会话传递变量的?

如果我的文件结构如下,这会产生问题吗?我的第二个问题是文件结构是否也会影响 ajax 数据的返回方式?

Root > index.php
Root > sessions.php
Root > 函数 >(调用数据库的 php 文件)
Root > 脚本 >(调用 php 函数的 js 文件)

我已经搜索了可以帮助我更清楚地理解(和心理图片)这些信息如何从页面传递到页面的教程,但什么也没找到!

4

2 回答 2

0

您的文件结构很好,与任何编码问题无关。

进行 AJAX 调用时,您调用的是 URL,因此完整的 URL 很好。但是,在调用您的函数时,您实际上包含了一个文件,该文件预计将驻留在您的服务器文件夹中,因此调用需要与您的调用文件的位置相关,而不是 URL。

会议

当您调用 session_start() 时,它会生成一个 cookie 并将会话 ID 存储在客户端浏览器中。因此,任何配置为拒绝 cookie 的客户端浏览器都将无法使用会话。当您设置会话变量时,服务器会将其存储在服务器上会话文件中的会话 ID 文件中。当您的程序从会话中请求一个值时,PHP 会在该会话文件中检查该变量并返回该值。这个想法是保存在会话文件中的大数据会使服务器变慢,并且不是理想的编码方式。在您的程序中,您可以查看 jQuery 以及 jQuery 中的几行代码如何提升您的程序以利用 AJAX 和 JSON 非常有效地发送和接收大量数据。

有关 PHP 会话的更多信息在这里

jQuery AJAX 信息在这里

于 2012-05-20T12:18:59.540 回答
0

你只需解决一个有趣的问题,你就必须把它做对。

要回答您的问题:

1) $_SESSION 用于在您的应用程序中构建持久行为,这意味着您可以跨请求传递数据。所有可以序列化的东西,都被序列化为字符串并写入文件。当请求时,数据会从该文件中反序列化并重建到 $_SESSION 数组中。更多关于这里的会议

2) 不,只要您返回一个具有正确 Content-Type 等的有效字符串(来自您的 PHP 脚本)。“ajax 数据”只是从您的 PHP 脚本中回显的字符串。正确设置标题例如:header('Content-Type: text/javascript');在回显之前。

关于内容类型的说明:这取决于你想在另一边实现什么。如果您使用 jQuery 并使用它构建客户端逻辑,那么您可能想要发送 JSON。在这种情况下,我建议将您的内容类型设置为“text/javascript”,而不是“正确”类型,即“application/json”。我曾经在使用 Internet Exploder 和 Firefox 时遇到很多问题,浏览器会与 application/json 混淆。由于 JSON 是 javascript(表示法),因此它始终可以使用“text/javascript”按预期工作。

有一个很好的 ini 指令“ include_path”,您可以根据自己的特定需求进行调整。有用的函数是set_include_path()get_include_path()。只有这两个你才能创造奇迹。

PHP 中的文件按“include_path”指令中的顺序包含。为了使其在包含/需要文件时更加灵活,请考虑 3 种最常用的做法:

  1. 用你的文件结构设置你的 include_path
  2. 构建一些花哨的自动加载器(参见spl_autoload功能)
  3. 仅 5.3+,使用命名空间

这些天include_path不那么受欢迎,因为每个人都倾向于用“适当的方式”和其他蹩脚的借口来吹嘘事情。如果您不构建另一个 Facebook、Twitter 或 Youtube-wannabe 应用程序,请考虑 include_path。它很简单,并且可以非常强大(而不是使用臃肿的技术)。

计划你的结构,并像这样添加你的目录:

<?php
// somewhere at the very top of your entry script
set_include_path(implode(PATH_SEPARATOR, array_merge(array(
    '/path/to/app/dir1',
    '/path/to/app/dir2',
    '/even/path/outside/your/app',
    // ...
), explode(PATH_SEPARATOR, DEFAULT_INCLUDE_PATH))));
?>

这会将您的 php.ini 文件 (DEFAULT_INCLUDE_PATH) 中设置的当前路径与您的结合起来。

现在,当您包含/需要一些脚本时,它将尝试按此列表的顺序包含它。

抱歉,解释太长了。希望它有所帮助;)

于 2012-05-20T12:46:44.363 回答