这很简单。
首先,您需要创建一个控制器,其中包含处理您的评级更新的特定任务。为了确保安全,请验证令牌!该令牌将带有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,是你应该在你的请求URL中添加&format = raw的index.php?选项= my_component&控制器= my_controller&格式=原料。如果你不这样做,你会得到Joomla模板的HTML包裹你的回应。 – Martin 2010-10-23 10:21:39
如果添加'format = raw','view.raw.php'将被调用。这是AJAX调用不需要的东西,会导致额外的负载和不必要的视图负载(控制器和模型对于Ajax来说足够了)。更好的任务输出并使用'jexit()'来防止脚本进一步执行。但是,如果您仍然想要使用该视图,请制作与输出相关的格式。原始 - 原始html('view.raw.php'),json - json响应('view.json.php')等... – Alex 2010-10-23 20:30:27
format = raw **不会**调用视图。 view = raw会调用视图,** format **是一个std Joomla选项,不会返回组件返回的任何其他html。这在返回JSON时很有用,因为您不需要其他任何其他html /文本,jQuery不会识别它。 – Martin 2010-10-25 10:39:37