Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery通过Joomla MVC组件更新数据库_Jquery_Ajax_Joomla_Components - Fatal编程技术网

使用jQuery通过Joomla MVC组件更新数据库

使用jQuery通过Joomla MVC组件更新数据库,jquery,ajax,joomla,components,Jquery,Ajax,Joomla,Components,我正在开发Joomla组件TTVideo的新版本。我正在尝试使用jquerystars插件设置一个评级系统。我已经解决了jQuery noconflict问题,但是对于如何安全地将投票发送到使用投票值更新数据库的助手类,我有点困惑 通常这是通过一个外部脚本完成的,只有ajax请求才能访问该脚本。我希望这样做,以便将它合并到我的组件中,并且以这样一种方式使std Joomla变量可用于helper类,例如getDBO()和数据库引用#uu table_name 如果您对如何实现这一目标有任何意见,

我正在开发Joomla组件TTVideo的新版本。我正在尝试使用jquerystars插件设置一个评级系统。我已经解决了jQuery noconflict问题,但是对于如何安全地将投票发送到使用投票值更新数据库的助手类,我有点困惑

通常这是通过一个外部脚本完成的,只有ajax请求才能访问该脚本。我希望这样做,以便将它合并到我的组件中,并且以这样一种方式使std Joomla变量可用于helper类,例如getDBO()和数据库引用#uu table_name


如果您对如何实现这一目标有任何意见,我们将不胜感激。谢谢。

这很直截了当

首先,您需要创建一个具有特定任务的控制器来处理您的评级更新。要使其安全,请验证令牌!令牌将随AJAX请求一起提供

以这个例子为例

function rate() {
    // Check for request forgeries
    JRequest::checkToken() or jexit('Invalid Token');

    //  Get ID of item
    //  update rating, etc...
}
其次,在视图中创建AJAX请求,显然是由某些操作触发的。 请确保将您的请求作为POST发送,因为您将要写入数据。。。 您可以让外部文档中的脚本从html文档中获取值(隐藏输入中的id、令牌、url等),也可以使用PHP生成javascript并将其包含在头部(如下面的示例所示)


谢谢Alex,我昨天已经按照您上面描述的方式实现了这个。我唯一遗漏的是代币,我一定要包括在内。如果您希望从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-raw html(
view.raw.php
),json-json响应(
view.json.php
),等等…format=raw不调用视图。view=raw将调用一个view,format是一个std Joomla选项,除了组件返回的内容之外,不返回任何其他html。这在返回JSON时非常有用,因为您根本不想在其中包含任何其他html/文本,否则jQuery将无法识别它。但是,如果控制器落入
display()
,则会调用相应的视图。而不是
view.html.php
->
view.raw.php
将被加载。我看不到您的格式使用逻辑,如果您返回JSON,那么调用
format=JSON
..是合乎逻辑的,但是每个人都有自己的实践和约定。祝你好运
<?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
    }); 
");
?>