Cra*_*nio 5 javascript php ajax content-management-system
编辑:我考虑过一个可能的解决方案,但我提出了另一个问题,因为它非常具体:用PHP查看AJAX代理,是否可能?
我创建了具有一定程度模块化的网站.因此,有可能存在"组件"(想到粗略的CMS),它们都带有自己的PHP代码,CSS和JavaScript,都是动态包含的.考虑一下这样的结构:
{siteroot}/component/datagrid/datagrid.php
{siteroot}/component/datagrid/js/datagrid.js
{siteroot}/component/datagrid/css/datagrid.css
{siteroot}/component/datagrid/ajax/getsomedata.php
Run Code Online (Sandbox Code Playgroud)
现在,问题是:对于JavaScript文件,特别是AJAX调用,如何使用URL进行上下文感知?
例如,如果datagrid.js我想siteroot/component/datagrid/ajax/getsomedata.php用AJAX 调用我应该写(使用JQuery):
$("#ajax").load("siteroot/component/datagrid/ajax/getsomedata.php");
Run Code Online (Sandbox Code Playgroud)
siteroot不同安装的变化.我通过包括将军来管理那个
var codeBase = <? echo json_encode(Config::$siteRoot); ?>
Run Code Online (Sandbox Code Playgroud)
在每个页面上使用PHP,从每个安装都可以轻松编辑的Config文件,所以我可以使用任何类似的JavaScript:
$("#ajax").load(codeBase + "/component/Datagrid/ajax/getsomedata.php");
Run Code Online (Sandbox Code Playgroud)
您如何看待这种方法?
.js.php动态Javascript.这非常不优雅,我必须在JavaScript文件中包含所有框架,例如:
<?php
include "../../libs/framework.php"; // get my functions...
$myUrl = Config::$siteRoot . Framework::getComponentAjaxDir("datagrid") . "/getsomedata.php";
?>
$("#ajax").load(<?=json_encode($myUrl)?>);
Run Code Online (Sandbox Code Playgroud)
另一个副作用是,我必须知道确切的include的路径framework.php......我不想这样这么辛苦,我codedin".js.php"文件.有关这方面的任何智能解
由于没有人以合适的方式回答,我对自己回答,提供一个我发现可能有用的解决方案。我的解决方案的关键很简单:
codeBase从 JavaScript 引用该代理我用两个参数调用此代理:plugin和action,它们标识 a) “真实”ajax 所在的插件文件夹和 b) 要使用的 ajax 文件以及其他参数:
$("#...").load( codeBase + "/main/ajax.php?plugin=Datagrid&action=gettable&otherparams"...)
在ajax.php我清理参数中,并使用plugin和action来获取“真实的”ajax 文件:
{serverRoot}/components/{插件}/ajax/{action}.php
然后我只是include将该文件放入ajax.php