(Opencart)如何在一个函数中加载控制器而不用该函数破坏Ajax?

时间:2019-05-06 16:39:16

标签: opencart

是否有一种方法可以在某些封闭空间内加载控制器(产品/类别),以使该控制器内的自定义函数的ajax不会中断?

我基本上是从ajax加载一个自定义函数,该函数位于核心控制器产品/类别中。在此函数中,我需要重新加载产品/类别控制器,以基于发送给该函数的ajax数据获取新的产品列表,然后将其作为对原始ajax的响应返回。

当我尝试做

$this->load->controller('product/category')

它使我使用该功能设置的ajax显得很刺耳,在控制台中看到404。

我尝试使用

$foo = $this->load->controller('product/category')

它可以工作,但我还需要执行

$this->load->view('product/category')

而且我不知道如何做到不破坏ajax。

1 个答案:

答案 0 :(得分:0)

基本上,我做了我想做的事情(请参阅问题的中部,即有关最终需要使用ajax刷新我的产品列表的部分)(通过阅读How to get products in JSON format from OpenCart using phonegap/jQueryMobile之后)从ajax我直接调用产品/类别,而不是问题中的产品/类别控制器内部的自定义函数,当我返回包含视图的html输出的响应时,我重新加载了在产品/类别中创建的div。用jQuery的html树枝。阿贾克斯是

    $(document).ready(function(){
    $.ajax({
        url: 'index.php?route=product/category&path=18&json',
        type: 'get',
        beforeSend: function() {
        },
        complete: function() {
        },
        success: function(data) {
            console.log('success');     
            if (data.length > 0) {
                console.log(data); 
                $('#mydiv').html(data);
            }
        }
    });
    });

而我添加到product / category.php中的代码是

    if(isset($this->request->get['json'])) {
        $this->response->setOutput($this->load->view('product/view_for_mydiv', $data));
    } else {
        $this->response->setOutput($this->load->view('product/category', $data));           
    }  

您可能会注意到,我在product / category.twig中添加了一个名为mydiv的div,将其恰好放在了要放置html的位置,然后在default / product / category /文件夹中创建了一个名为view_for_mydiv.twig的树枝,当看到对它进行了ajax调用时,产品/类别控制器将发回的html而不是其普通树枝。位于category.twig内的#mydiv div包装的html与使用view_for_mydiv.twig呈现产品/类别时生成的html相同。