Ajax在Joomla中调用控制器?

时间:2015-12-26 20:08:00

标签: php jquery ajax joomla

好的,我为我的Joomla安装了一个组件,但现在我正在努力添加自定义计数器视图。

在组件的controller.php中,我添加了以下功能:

    function updateView() {
    $db = JFactory::getDBO();
    $videoid = JRequest::getVar('videoid');
    if ($videoid) {
        $query = "update #__hdflv_upload SET times_viewed=1+times_viewed where id=$videoid";
        $db->setQuery($query);
        $db->query();
    }
    $query = "select times_viewed from #__hdflv_upload where id=$videoid";
    $db->setQuery($query);
    $timeView = $db->loadResult();
    echo $timeView;
    jexit();
}

无论如何,在页面中我试图用php调用此函数并且工作正常,但启用了缓存后脚本停止工作。他们告诉我,在Joomla中,反对意见应始终在Ajax中。但我是Ajax的专家,我试过这个,但没有结果:

    <script>
$.ajax({
    url: 'index.php?option=com_contushdvideoshare&task=updateView&format=raw',
    success: function(data){
                if(!data.length){
            // Throw an error
            return;
        }

       $('.container').html(data);

    }
});
</script>

有人能帮助我吗?谢谢

1 个答案:

答案 0 :(得分:0)

首先,您的第一个代码中应该有一个SQL注入漏洞:

function updateView() {
    $db = JFactory::getDBO();
    $videoid = JRequest::getInt('videoid');
    if ($videoid) {
        echo '0';
        jexit();
    }
    $query = "update #__hdflv_upload SET times_viewed=1+times_viewed where id=".(int)$videoid;
    $db->setQuery($query);
    $db->query();

    $query = "select times_viewed from #__hdflv_upload where id=".(int)$videoid;
    $db->setQuery($query);
    $timeView = $db->loadResult();
    echo $timeView;
    jexit();
}

如果你想要检索一个整数,请使用JRequest :: getInt('videoid'),Joomla将为你检查并验证输入。

你也可以直接在你的sql查询中转换为int,这是一个好习惯。

然后,缓存获取查询。您有两种解决方案可以改变这种行为:

  • 永远不会缓存帖子请求,因此请使用ajax帖子请求
  • 在ajax函数中指定不应缓存此请求

这是js代码修改

$.ajax({
    url: 'index.php?option=com_contushdvideoshare&task=updateView&format=raw',
    method: "POST", //Use post method
    cache: false, //Specify no cache
    success: function(data){
        if(!data.length){
            // Throw an error
           return;
        }
       $('.container').html(data);
    }