Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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
如何在Joomla组件中使用AJAX根据所选国家加载状态字段?_Joomla_Joomla3.0 - Fatal编程技术网

如何在Joomla组件中使用AJAX根据所选国家加载状态字段?

如何在Joomla组件中使用AJAX根据所选国家加载状态字段?,joomla,joomla3.0,Joomla,Joomla3.0,在组件视图中,我有如下内容: <?php echo TestcompHelperFind::loadStates(...); ?> <?php echo TestcompHelperFind::loadCounties(...); ?> 上述静态函数分别加载带有州名和国家的下拉列表 类TestcompHelperFind位于文件/administrator/components/com\u testcomp/helpers/find.php中 如何基于使用AJAX选

在组件视图中,我有如下内容:

<?php echo TestcompHelperFind::loadStates(...); ?>
<?php echo TestcompHelperFind::loadCounties(...); ?>

上述静态函数分别加载带有州名和国家的下拉列表

TestcompHelperFind
位于文件
/administrator/components/com\u testcomp/helpers/find.php


如何基于使用AJAX选择的国家加载状态下拉列表?我不确定我应该在ajax函数中提供什么url。

在客户机上,您需要一个函数来监视国家/地区选择的更改,并在更改发生时使用回调调用相应的url,该回调将填充国家/地区选择

在服务器上,您需要输出select内容

既然您已经有了html输出,那么让我们使用这种方法。或者,您可以让服务器方法返回一个json对象,并使用javascript解析它并填充select。但是让我们继续使用html通信,即服务器返回select的html内容

1。在服务器上

1.a。输出县选择

我们只需要返回TestcompHelperFind::LoadCountries(…)的结果到ajax调用。通过在组件的控制器中编写一个新方法,即组件文件夹根目录中的controller.php或一个子控制器(如果合适),可以轻松实现这一点。这取决于你把它放在一个有意义的地方

在控制器内部,只需添加一个新的公共任务,例如

class SomethingController extends JController
{
    public function getCountiesHTML() {
        $input = JFactory::getApplication()->input;
        $country = $input->getCMD('filter_country');
        // load helper if necessary, then:
        echo TestcompHelperFind::loadCounties($country); 
        exit; // this will stop Joomla processing, and not output template modules etc.
    }
请注意
退出最后,这将使Joomla只输出组件的输出(我们的echo),而不是整个模板/模块等

1.b将ID添加到country和county选项中,以便可以在客户端对其进行操作;我假设
filter_country
filter_county

2。在客户端上

您将需要调用url

index.php?option=com_something&action=getCountiesHTML&filter_country=UK
更改国家/地区选择时。它还需要取消任何挂起的请求,以避免消息重叠。为了简单起见,假设您使用一个库来处理Ajax,我将为jQuery编写一个示例:

<script>
var xhr;
jQuery(function($) {
    $('#filter_country').change(function(){
        var filterCountry = $('#filter_country').val(); 
        if (xhr && xhr.abort) {xhr.abort();xhr=false;}
        xhr = jQuery.ajax(
                url: 'index.php', 
                data: 'option=com_something&task=getCountiesHTML&filter_country='+filterCountry, 
                success: function(data){
                    jQuery('#filter_county').replaceWith(data);
                }
        );
    });
});
</script>

var-xhr;
jQuery(函数($){
$(“#筛选器_country”)。更改(函数(){
var filterCountry=$('filter_country').val();
如果(xhr&&xhr.abort){xhr.abort();xhr=false;}
xhr=jQuery.ajax(
url:'index.php',
数据:'option=com\u something&task=getcountriesHTML&filter\u country='+filter country,
成功:功能(数据){
jQuery('#filter_county')。替换为(数据);
}
);
});
});

要取消之前的请求,请查看专用答案,如。

谢谢您的回答。这是非常有帮助的,我解决了我的问题。然而,我的问题中有一个拼写错误。它应该是
loadCountries(…)
,而不是
loadCountries(…)