Ano*_*ous 6 php ajax jquery asynchronous page-refresh
我的问题实际上不是ajax加载本身,更多的是没有javascript加载它的能力.我的意思是,我应付自如,当我编写我的整个项目只基于Ajax的可用性或 只是不使用Ajax.
//编辑:尽管Arend已经有了或多或少的有效答案,但同时"这个问题没有直接答案".但是,我想看看像我这样的场景开发人员的其他一些方法!即使只是一些链接可以帮助!
基本上我只是感到沮丧,在同一页面上编码所有内容两次,以确保没有和启用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>';
}
Run Code Online (Sandbox Code Playgroud)
现在我module_two.php
和module_two.php
我的代码执行不同取决于$ function的返回变量.喜欢:
if($function >= 1 && another_var != 'something') {
// do stuff
}
else {
// do other stuff
}
Run Code Online (Sandbox Code Playgroud)
现在,因为这可以轻松地重新加载,当我想在keyUp/enter/submit或其他任何东西上加载两个模块时,我基本上有一些问题:
$_POST
手动将变量发送到模块才能使用它们$another_var = $_POST['another_var'];
我发现这有点令人讨厌,我想知道你们是怎么做到的.我希望我的编码方式不是太傻,但我想不出另一种方式.可能很难与我的基本示例联系起来,但是用代码带来整个项目会太多了.总结一下,我正在寻找一种更好的方法来编码和清理这个混乱 - 一定有办法!我考虑过会议,但为了兼容性,我也不想依赖它们(如果有人不允许使用cookie).
如果你无法通过我的代码组装方式来解决我想要完成的事情,我将解释一个我面临很多的场景(如果你已经理解我的痛苦,那就不重要了):
index.php
页面,其中所有内容都被执行,具有html主体和CSS样式等等.这个页面需要一些变量,这些变量是从需要索引的页面设置的(就像$another_var
在我的例子中一样).希望这不是太抽象.想想一个预订系统,其中一些变量是从您来自的页面(您要预订的事件)设置的,然后是用户设置的更多内容(时间跨度,一些偏好,......).最后,它应该显示从数据库到最终结果的结果 - 您可以说用户逐步缩小结果.
Are*_*end 11
你的问题没有直接答案,但有一些值得思考的问题.
关注点分离 您可以考虑是否可以分离您的商务逻辑和布局逻辑.通常,使用模板引擎可以极大地帮助它.我有过积极的经历,例如Twig或Smarty(就在不久之前,不知道他们现在如何衡量).它要求您以(线性较小)方式编写代码,但更符合逻辑.
像关注点分离的OOP的典型示例可能是这样的:
$this->setParam('Myparam','myvalue');
if ($this->isAjax())
{
$this->setTemplate('ajax.php');
$this->setLayout(false);
} else {
$this->setTemplate('normal.php');
$this->setLayout('Mylayout');
}
return $this->render();
Run Code Online (Sandbox Code Playgroud)
这是一个富有想象力的情况,可以在许多MVC类似的应用程序和框架中找到.主要的想法是你应该有可能从你的数据中分离你的布局.我建议看看一些现代的灵感框架(如symfony,codeigniter,zend框架).
词汇表/在解耦的PHP应用程序中经常应用的概念 以下是可以使用的概念的快速列表.
php中的示例mvc: http ://www.phpro.org/tutorials/Model-View-Controller-MVC.html
注意:我真的不喜欢这个实现.我更喜欢现有的框架.我完全喜欢本教程的解释.例如,对我来说,这个链接是为了学习,而不是为了实现.
Silex 对于一个简单的解耦php微框架,我真的会推荐使用symfony2制作的silex.它易于实现和学习,但包含了这里描述的概念的主要内容; 并使用所有php 5.3+好东西,如命名空间和闭包.
见:http://silex.sensiolabs.org/
Frontcontroller Pattern 只为您的代码提供一个和一个入口点.我通常只在您的应用程序中有一个,也只有一个点.通常,前端控制器将请求"发送"给应用程序的其余部分
http://en.wikipedia.org/wiki/Front_Controller_pattern
路由
路由系统通常与前控制器模式结合使用.它基本上描述了哪个URL连接到哪个模块/控制器.这允许您更改人们访问您的应用的方式而无需更改网址.
请参阅:https://stackoverflow.com/questions/115629/simplest-php-routing-framework
调节器
控制器是应用商务逻辑的地方.从数据库获取数据,检查权限,设置模板,设置布局等(尽管如果它变得过于单独关注,它也会移出控制器之外).
模型 模型基本上是使用管理数据库的层.这可以是一个简单的类,您可以移动所有mysql_*函数,也可以是一个功能齐全的ORM.主要的哲学是与数据库中获取和放置信息相关的所有逻辑都是分开的.
一步:ORM 应用程序中经常使用的方法是对象关系模型,它们将SQL映射"映射"到PHP对象.Doctrine和Propel是这些精心设计的两个库.在我的开发中,我非常依赖这些系统.从这个意义上讲,学说或推进部分将代表模型层.
视图: 视图通常由模板引擎组成.有些人使用普通的PHP作为模板,而其他人(例如symfony)创建了一个单独的范围,其中放置了变量.关于什么是最好的讨论和意见有很多,一个就在stackoverflow上:
我喜欢的人: - Twig:http ://twig.sensiolabs.org/ - sfTemplate:http ://components.symfony-project.org/templating/ - Smarty:http://components.symfony-project.org/templating /
解耦机制:
基于事件的系统使用您的事件可以帮助分离代码.例如,如果您想在保存记录后发送电子邮件,事件是一个很好的解决方案; 一般来说,模型不应该知道电子邮件.因此事件是一种连接它们的方式:您可以让您的-email-send-class侦听某些记录,以便它们发送正确的电子邮件.(也许你更希望你的电子邮件从你的控制器发送,这可能是一个品味的问题).
依赖注入在PHP中使用OOP代码时,许多依赖于运行单例类(配置等).从OOP的角度来看,这可能被认为是不好的,因为它很难测试它,并且让依赖关系像这样运行并不是很优雅.依赖注入是一种来自Java的模式,现在在新的框架中用于解决这个问题.可能有点困难,但你会看到它回到几个新的框架中.
php中的依赖注入:PHP 5.3中的依赖注入
构架:
很多这些方法很难,或者很多工作要自己实现.许多人将驻留在这个框架中.您可能需要也可能不需要框架.您可能,也可能不想要一个框架,这是您的选择.但是,了解框架如何做到这一点仍然很有用,而不是试图自己重新发明轮子.
无框架的PHP框架:https://stackoverflow.com/questions/694929/whats-your-no-framework-php-framework
好习惯:https://stackoverflow.com/questions/694246/how-is-php-done-the-right-way
值得关注的框架(imho):CodeIgniter,Kahona,CakePHP,Symfony(1.4/2.0),Silex,Zend Franework,Yii.还有很多,每个都有他们的粉丝和仇恨者.
归档时间: |
|
查看次数: |
1015 次 |
最近记录: |