使用jQuery通过Joomla MVC组件更新数据库
Posted
技术标签:
【中文标题】使用jQuery通过Joomla MVC组件更新数据库【英文标题】:Use jQuery to update database through Joomla MVC component 【发布时间】:2011-04-28 13:59:13 【问题描述】:我正在开发我的 Joomla 组件 TTVideo 的新版本。我正在尝试使用 jQuery stars 插件设置评分系统。我已经解决了 jQuery 无冲突问题,但是对于如何将投票 安全地 发送到使用投票值更新数据库的帮助程序类,我有点困惑。
通常这是通过一个外部脚本来完成的,该脚本只能由 ajax 请求访问。我想这样做,以便将它合并到我的组件中,并且以 std Joomla 变量可用于帮助程序类的方式,例如getDBO() 和数据库引用#__table_name。
任何有关如何实现此目的的 cmets 将不胜感激。谢谢。
【问题讨论】:
【参考方案1】:这很简单。
首先,您需要创建一个具有特定任务的控制器来处理您的评分更新。为了确保安全,请验证令牌!该令牌将随 AJAX 请求一起提供。
考虑这个例子
function rate()
// Check for request forgeries
JRequest::checkToken() or jexit('Invalid Token');
// Get ID of item
// update rating, etc...
其次,在视图中创建您的 AJAX 请求,显然是由某些操作触发的。 确保将您的请求作为 POST 发送,因为您要写入数据... 您可以让外部文档中的脚本从 html 文档(隐藏输入中的 id、token、url 等)获取值,也可以使用 php 生成 javascript 并将其包含在头部(如下例所示)。
<?php
//
$url = JRoute::_('index.php?option=my_component&controller=my_controller');
$token = JUtility::getToken(); // <- Session token
$id = 101; // <- YOUR ID
// This will add the request to the head of the document, instead of somewhere in the document
JFactory::getDocument()->addScriptDeclaration("
.ajax(
type: 'POST',
url: $url,
data:
'$token': '1', // <-- THIS IS IMPORTANT
'task': 'rate',
'id': $id
,
success: youSuccessFunction
);
");
?>
您可能需要修改一些东西,但这是 MVC 中 AJAX 背后的理念。
注意:您也可以调用 JRequest::checkToken('get')
,这将检查 url 中的令牌。这对于读取数据的 AJAX 调用很有用。
【讨论】:
谢谢亚历克斯,我昨天已经按照你上面的描述实现了这个。我唯一遗漏的是令牌,我一定会包括在内。如果您想收到来自 ajax 请求的响应,请注意另一件非常重要的事情,例如json, xml, html, 是你应该添加 &format=raw 到你的请求 url 例如index.php?option=my_component&controller=my_controller&format=raw。如果不这样做,您将获得 Joomla 模板 html 包裹在您的响应中。 如果您添加format=raw
,则将调用view.raw.php
。这是 AJAX 调用不需要的东西,会导致额外的负载和不必要的视图负载(控制器和模型对于 ajax 来说已经足够了)。更好地输出任务并使用jexit()
防止脚本进一步执行。但是,如果您仍想使用视图...制作与输出相关的格式。 raw - 原始 html (view.raw.php
)、json - json 响应 (view.json.php
) 等...
format=raw 不调用视图。 view=raw 会调用一个视图,format 是一个标准 Joomla 选项,除了组件返回的内容之外不返回任何其他 html。这在返回 JSON 时很有帮助,因为您根本不希望其中包含任何其他 html/文本,否则 jQuery 将无法识别它。
你是对的,我没有表达自己的权利。但是,如果您的控制器属于display()
,则会调用相应的视图。而不是 view.html.php
-> view.raw.php
将被加载。我没有看到你的格式使用逻辑,如果你返回 JSON,调用 format=json
... 是合乎逻辑的,但每个人都有自己的实践和约定。祝你好运以上是关于使用jQuery通过Joomla MVC组件更新数据库的主要内容,如果未能解决你的问题,请参考以下文章