0

这是一个很难描述的问题。

大图:一个 ajaxed 对话框提交到一个页面以创建一个新的内容集记录。创建内容集记录后,这个新创建的内容集应该是选中的内容集,所有创建或修改的内容都需要附加新创建的内容集id。内容集 ID 是在页面加载期间使用 MySQL 中的自动增量字段创建的。

问题详细信息:我有一个使用 ajax 拉出内容集创建对话框的页面。对话框提交到一个空白 URL,因为它可能从多个位置调用,我希望对话框提交到它被调用的任何 url。在对话框提交到调用它的页面后,页面上的一些 PHP 在 MySQL 数据库中创建一个内容集记录。我需要使用 GET 变量将新创建的记录的插入 ID 从页面传递到页面(最简单的方法,因为我已经通过这种方式传递了分页变量),但是由于必须在获取插入 ID 之前加载页面,所以我没有填充 GET 变量需要占据的所有位置的方式(在页面链接、php $_GET 变量、url 上)。

需要考虑的一些事项:

  • 我将通过会话变量传递新创建的插入 ID,除非这会在有人点击后退按钮时导致问题,并且会话变量不会恢复到其先前的值。
  • 我会使用 Javascript 和 PHP 来更改使用此插入 id 变量的各个位置,除非他们拉出另一个提交到空白 url 的 ajaxed 对话框,空白 url 当然不会有新的 GET 变量。此外,这似乎很草率,维护起来将是一场噩梦。
  • 在创建记录后,我会在添加新的 GET 变量后重定向回同一页面,除非我无法传递 POST 变量,从而使错误和成功消息完全令人头疼。我不想使用 GET vars 告诉页面要显示什么错误/成功消息,因为 GET vars 使用 $_SERVER['QUERY_STRING'] 以及空白链接在页面之间传递。
  • 我根本无法在创建后使新创建的内容集自动加载。这使用户需要自己加载新创建的内容集,这是我想避免的。

有什么优雅的解决方案吗?由于网站的设置方式,这个问题可能非常独特,但必须有人处理过类似的事情。我希望不必为了解决这个小问题而过多地改变网站设计。欢迎任何想法。

4

3 回答 3

0

很确定您想更改 URL 哈希字符串(无论它叫什么)。因为您无法更改 URL。基本上看看像 Facebook 这样的网站是如何拥有它们的 URL 的。

于 2010-11-19T01:10:00.783 回答
0

我了解您对会话不情愿,但这可能是使用它的好时机。

另一个想法是在页面中使用隐藏输入。

在第一个对话框之后,向 PHP(通过 ajax)发出请求,该请求将记录插入 db,并获取插入的 id。正确的?

在 ajax 回调中,您可以:

a)进行隐藏类型的输入以保存id,在表单中进行。每个帖子都有id

b) 执行更复杂的 javascript 以将“&id=id”插入到每个链接/按钮 url 字符串中。jquery 在这里肯定会很有用。thisa 很难,因为它可以是锚链接、按钮操作等

我真的不明白你坚持把它放在 GET 中,但你可以通过一些额外的工作来实现它。你不能在没有重新加载的情况下将它放在 ajax 之后的 url 中,但你可以确保你之后的任何地方都有它。

于 2010-11-19T01:14:28.543 回答
0

我必须同意这里的基于会话的解决方案。请记住,如果用户回击,您应该能够创建一种机制来恢复到旧值。为此,您需要三个会话变量,一个包含当前的 id 值,一个包含之前的 id 值,一个包含您所在的最后一页的 url。这样,您应该能够通过检查当前 url 是否等于存储在会话变量中的最后一个 url 来检查用户是否点击了后退按钮,如果是,则恢复为旧 id。

请注意,这只是一个一般概念,我相信您会遇到一些技术问题,在这样的系统正常工作之前需要解决这些问题。

于 2010-11-19T03:49:07.660 回答