您应该按照您的建议创建一个自定义模块,并将您的HTML5应用程序单独放入模块的子文件夹中。当它被访问时,它将使用与你通常期望的相同的路径,所以如果文件存在于HTML5应用文件夹下的路径中,javascript/app.js
就可以工作。
对于JSON数据自定义模块将是这个样子:
function mymodule_menu() {
$items['my/app/data'] = array(
'page callback' => 'mymodule_ajax_callback',
'access callback' => TRUE,
'type' => MENU_CALLBACK
);
return $items;
}
function mymodule_ajax_callback() {
$type = $_POST['type'];
$nodes = db_query("SELECT nid, title FROM {node} WHERE type = :type", array(':type' => $type))->fetchAllKeyed();
drupal_json_output($nodes);
drupal_exit();
}
该代码在mp/app/data
它使用mymodule_ajax_callback()
,因为它的页面回调定义(使用hook_menu()
)的菜单路径。
mymodule_ajax_callback()
只是抓住从数据库匹配type
参数在AJAX $_POST
通过输出自己的ID和标题在一个JSON字符串到页面(当你请求/my/app/path
然后将这个返回你的Ajax响应)所有节点。
希望有帮助
谢谢,这里有一些有用的东西。 index.html页面如何提供服务?我不想去domain.com/Sites/All/Modules/RoomBallot/来获取它。我如何让它出现在domain.com/RoomBallot/并且可以以javascript/app.js的形式存在网址,或者它们的格式应该是/javascript/app.js – ForbesLindesay
想一想,它没有任何区别你把你的HTML5应用程序;因为你的模块将定义JSON菜单路径('my/app/data'),所以你可以像你通常那样从JS中调用这个文件夹(''.ajax({'url':'/ my/app /数据'});')。就路径'javascript/app.js'而言,Drupal不会“干扰任何已经存在的路径/文件,因此调用相对于HTML应用程序根目录的路径并非站点根目录会很好。 – Clive
虽然我想把整个事情都包装在模块中,所以它住在那个文件夹中。这样,更新Drupal之类的事情就会更容易,因为所有自定义代码都位于网站目录中。我想我可以编写一个drupal函数来处理对'/ RoomBallot/{FolderName}/{FileName} .php'的请求,然后读出文件并将其返回。 – ForbesLindesay