【发布时间】:2012-01-07 01:14:45
【问题描述】:
我的问题实际上不是 ajax 加载本身,更多的是在没有 javascript 的情况下加载它的能力。我的意思是,当我基于 ajax-availability OR just 编写整个项目而不使用 ajax 时,我可以轻松应对。
//编辑:虽然阿伦德已经有了或多或少有效的答案,但同时“这个问题没有直接的答案”。但是,我希望看到开发人员针对像我这样的场景的其他一些方法!即使只是几个链接也能提供帮助!
基本上,我只是感到沮丧,在同一页面上对所有内容进行两次编码,以确保未启用和启用 Javascript 的用户都具有相同的体验。这很烦人,我一直想知道其他人是如何解决这个问题的。
当我更新两个依赖于相同变量的 div 时,它会变得混乱。这是一个例子:
非 js 版本
require 'classobject.class.php';
$another_var = 'something';
$class = new classobject($_POST['variable']); // just an example to show that this is dynamic - I'm aware of injection!
$function = $class->returnsth(); // returns 1
if(isset($_POST)) {
echo '<div id="one">Module 1 says:'; $require 'module_one.php'; echo '</div>';
echo '<br /><br />';
echo '<div id="two">Module 2 says:'; $require 'module_two.php'; echo '</div>';
}
现在在module_two.php 和module_two.php 中,我的代码执行方式不同,具体取决于$function 的返回变量。
喜欢:
if($function >= 1 && another_var != 'something') {
// do stuff
}
else {
// do other stuff
}
现在,由于重新加载很容易,当我想在 keyUp/enter/submit 上加载两个模块时,我基本上遇到了一些问题:
- 我必须手动将
$_POST变量发送到模块才能使用它们 - 我必须重新执行该类及其方法,并在每个模块文件中为它们建立一个链接 (require_once)。
- 由于模块中不存在 $another_var,我也必须将此变量发送到每个模块(例如使用 post),然后在使用它之前,我必须像“更改”它一样
$another_var = $_POST['another_var'];
我觉得这有点烦人,我想知道你们是怎么做到的。我希望我的编码方式不会太傻,但我想不出另一种方式。可能很难与我的非常基本的示例相关联,但是将整个项目与代码一起带来太多了。 总而言之,我正在寻找一种更好的方法来编码和清理这个混乱 - 一定有办法!我考虑过会话,但为了兼容性我不想依赖它们也可以(如果有人不允许使用 cookie)。
如果您无法理解我通过这种组装代码的方式要完成的工作,我将解释我经常面临的一个场景(如果您已经了解,则不重要我的痛苦):
- 基本上我有我的
index.php页面,所有内容都在其中执行,包括html 正文和css 样式等。此页面需要一些变量,这些变量是从需要索引的页面设置的(例如我的示例中的$another_var)。 - 现在也可以设置其他变量(例如从表单)。根据不同的类和方法加载新变量(数组),这些变量在我的模块中的 while 循环中使用,以回显所有内容。
希望这不是太抽象。考虑一个预订系统,其中一些变量是从您来自的页面(您想要预订的事件)设置的,然后用户设置更多的东西(时间跨度,一些偏好,......)。最后,它应该显示从数据库一直到最终结果的结果 - 你可以说用户逐步缩小结果范围。
【问题讨论】:
-
我发现 progressive enhancement 和 strategy pattern 对于处理 ajax 和非 ajax 非常有帮助。
-
@Herbert 我仔细阅读了您的链接文章,并在 Google 上找到了更多内容。仍在为如何使用它来处理 ajax 和非 ajax 站点的具体想法而苦苦挣扎。您是否有一些代码可以让我更清楚您将如何做到这一点?
标签: php ajax jquery asynchronous page-refresh