編集:私は可能な解決策について考えましたが、それは非常に具体的であるため、別の質問をしました:PHPを使用したAJAXプロキシを参照してください、それは可能ですか?
この問題に何度か遭遇しました...
ある程度のモジュール性を備えたサイトを作成します。したがって、独自のPHPコード、CSS、およびJavaScriptをすべて動的に含む「コンポーネント」(大まかなCMSを考えてください)が存在する可能性があります。次のような構造について考えてください。
{siteroot}/component/datagrid/datagrid.php
{siteroot}/component/datagrid/js/datagrid.js
{siteroot}/component/datagrid/css/datagrid.css
{siteroot}/component/datagrid/ajax/getsomedata.php
さて、問題は次のとおりです。JavaScriptファイル、特にAJAX呼び出しの場合、URLを使用してそれらをコンテキスト認識にする方法を教えてください。
たとえば、 AJAXを使用datagrid.js
して呼び出したい場合は、 siteroot/component/datagrid/ajax/getsomedata.php
(JQueryを使用して)次のように記述します。
$("#ajax").load("siteroot/component/datagrid/ajax/getsomedata.php");
最初の問題:
siteroot
さまざまなインストールでの変更。私は将軍を含めることによってそれを管理しました
var codeBase = <? echo json_encode(Config::$siteRoot); ?>
すべてのページでPHPを使用し、インストールごとに簡単に編集できる構成ファイルから、次のようなJavaScriptで実行できます。
$("#ajax").load(codeBase + "/component/Datagrid/ajax/getsomedata.php");
このアプローチについてどう思いますか?
2番目の問題:しかし、コンポーネントフォルダーまたは他のコンポーネントのフォルダーも返すPHP関数があります。URL全体を動的にするといいでしょう。これは、必要に応じてコンポーネントの構造の変更も考慮に入れます。私が見つけた唯一の解決策は、
.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)?>);
もう1つの副作用は、パスを正確に知る必要があることです...これを「.js.php」ファイルにハードコーディングしたくないのです。それについての賢い解決策はありますか?include
framework.php