如何在Joomla中为AJAX请求添加处理PHP文件

时间:2015-07-05 13:30:10

标签: php ajax joomla

我正在尝试在Joomla中开发一个表单。基本问题是: 如何根据用户之前选择的内容更改表单选择选项?当用户填写表单时,我需要发出几个数据库请求。使用AJAX,我需要一个处理PHP文件。有人可以告诉我如何在Joomla中执行此操作,因为使用JCE文件浏览器我无法添加任何内容。

谢谢!

1 个答案:

答案 0 :(得分:1)

假设你已经知道如何写一个"正常" Joomla组件从数据库中检索数据并在页面中显示,这是建议的解决方案。

在我的示例中,我将动态检索"产品列表"对于所选的"类别"。

COMPONENT:Ajax请求的服务器部分

我们假设我们使用JSON在Ajax调用中交换数据。

在每个Joomla组件中,您可以创建一个JSON视图,在默认的view.html.php旁边创建一个view.json.php文件。添加" format = json"时将使用该视图到您的查询字符串。

因此,您创建这些使用相同模型获取数据的附加视图,但将它们输出为JSON字符串。 JSON视图通常非常简单,如下所示:

public function display()
{
    $this->products = $this->getModel()->getProducts();
    echo json_encode($this->products);
}

您还需要添加" tmpl = component"这样响应只包含来自组件的数据,而不包含Joomla页面的其余部分(如模块等)。

您最终应该可以放入浏览器:

http://yoursite/index.php?option=mycomponent&view=products&format=json&tmpl=component

您将获得JSON产品列表。

在您的请求中添加过滤器

当然,您只需要所选类别的产品,因此您应该修改" getProducts"用于检查category=xyz之类的查询字符串参数的模型方法。

网址变为

http://yoursite/index.php?option=mycomponent&view=products&category=1&format=json&tmpl=component

P.S。关于如何实施检查的更详细的讨论是偏离主题的,因为它与AJAX无关。

JQUERY:AJAX请求的客户端部分

现在您有一个通过URL接受请求并提供JSON响应的组件,您可以使用jQuery在每次"类别"选择已更改:

var category_select = $('#category');
var product_select = $('#product');
var request = jQuery.ajax({
    "url": 'index.php?option=mycomponents&view=products&tmpl=component&format=json&category=' + category_select.val()
    "type": "GET"
}).done(function (result) {
    result.each(function (product) {
        var new_option = jQuery('<option/>', {
            'value': product.id,
        })
        .text(product.name)
        .appendTo(product_select);
    });
})

此JS代码应添加到您显示表单的同一页面中。