我知道我目前实现ajax页面加载的方式并不是最好的方法。事情是这样的:
不过,我有一个模块(我创建的),它具有发送所有ajax请求的路径。基于urls参数,它能够显示实际需要加载的页面(节点)。它只返回一个用于处理的json_encoded字符串(呈现是客户端完成的)。
Drupal的问题在于它想用所有的模板来装饰所有的东西。所以我把json和html混在一起。我显然不想那样。事实上,我根本不想做任何渲染。到目前为止,我自己提出的唯一一件事是实现hook_page_alter,并尽可能多地取消数据设置,直到它只使用json呈现为止。有段时间起作用了。
然后我添加了devel_themer模块(或者它称为什么)。这会自动将一些javascript附加到每个响应的末尾。这破坏了我通过这些ajax请求发送的json。
这就引出了我处理ajax的方法的问题。
这类事情的最佳实践是什么?最终,可能会有最小的服务器端呈现,但我希望将数据以块的形式发送,这样我就可以将数据插入到页面的各个部分。我不想把所有的都放在一个地方。ajax_response.title将在div中使用id="title“,而ajax_response.body将在div中使用id="body”。这两者之间可能有我不想在请求之间替换/重呈现的信息。
我的主要问题是:如何让drupal准确发送我想要的文本作为响应,而不是坚持用模板装饰响应并允许模块添加信息?
发布于 2012-03-30 21:14:11
只需在页面回调中打印json内容,而不是返回它,那么Drupal就不会在其周围添加任何内容。实际上,有一个名为drupal_json_output()的助手函数,参见用户_自动完成()中的一个示例。
这是目前处理这一问题的官方方法,Drupal 8有望将对不同类型内容的正确处理直接添加到路由系统中(路由系统将进行大量的重新工作,并构建在Simfony2组件之上)。
发布于 2012-03-30 21:15:42
使用
// do your processing
print $json_object这将避免所有Drupal呈现和模板内容。
https://drupal.stackexchange.com/questions/27054
复制相似问题