Ajax 乔姆拉和阿贾克斯
为了让下面的ajax调用在我的Joomla 3.6组件中工作,我花了很长时间。下面的javascript函数的工作原理是,它确实返回数据并在页面中显示--在一瞬间--然后页面重新加载,我得到view.html.php的结果,这不是我在这里需要的。无论我将async属性设置为true还是false,都会得到相同的结果。如果将async设置为true,则会更快。在view.raw.php中返回的数据没有问题。我必须避免重新加载view.html.php。javascript函数getCase()是通过“onclick”按钮调用的,我总是在测试之前清除缓存。 谢谢 view.raw.php中的整个display()函数:Ajax 乔姆拉和阿贾克斯,ajax,joomla,Ajax,Joomla,为了让下面的ajax调用在我的Joomla 3.6组件中工作,我花了很长时间。下面的javascript函数的工作原理是,它确实返回数据并在页面中显示--在一瞬间--然后页面重新加载,我得到view.html.php的结果,这不是我在这里需要的。无论我将async属性设置为true还是false,都会得到相同的结果。如果将async设置为true,则会更快。在view.raw.php中返回的数据没有问题。我必须避免重新加载view.html.php。javascript函数getCase()是通
public function display($tpl = null)
{
$app = JFactory::getApplication();
$getdata = $app->input->get('getdata');
$case_index = !empty($app->getUserState('case_index')) ? $app->getUserState('case_index') : 0;
if ($getdata == 'nextcase' || $getdata == 'previouscase' || $getdata == 'initialcase') {
$app->setUserState('active_tab', 'browsecases');
$cases_arr = $app->getUserState('rc_cases');
switch ($getdata) {
case 'nextcase': $case_index++; break;
case 'previouscase': $case_index--; break;
case 'initialcase': $case_index = 0; break;
case 'default': break;
}
if ($case_index < 0) {
$case_index = 0;
$msg = 'You have reached the first case in the result set.';
$app->enqueueMessage($msg, 'warning');
}
if ($case_index >= count($cases_arr)) {
$case_index = count($cases_arr)-1;
$msg = 'You have reached the last case in the result set.';
$app->enqueueMessage($msg, 'warning');
}
if ( !empty($cases_arr[$case_index]) ) {
$app->setUserState('case_index', $case_index);
$app->setUserState('current_case', $cases_arr[$case_index]);
}
header("Content-Type: text/html; charset=utf-8");
print $app->getUserState('current_case');
$app->close();
}
}
公共功能显示($tpl=null)
{
$app=JFactory::getApplication();
$getdata=$app->input->get('getdata');
$case\u index=!empty($app->getUserState('case\u index'))?$app->getUserState('case\u index'):0;
如果($getdata=='nextcase'| |$getdata=='previouscase'| |$getdata=='initialcase'){
$app->setUserState('active_tab','browsecases');
$cases_arr=$app->getUserState('rc_cases');
交换机($getdata){
案例'nextcase':$case_index++;break;
案例“previouscase”:$case_索引--;break;
案例'initialcase':$case_index=0;中断;
案例“默认”:中断;
}
如果($case_索引<0){
$case_索引=0;
$msg='您已到达结果集中的第一个案例';
$app->enqueueMessage($msg,'warning');
}
如果($case\u index>=计数($cases\u arr)){
$case\u index=计数($cases\u arr)-1;
$msg='您已到达结果集中的最后一个案例';
$app->enqueueMessage($msg,'warning');
}
如果(!空($cases\u arr[$case\u index])){
$app->setUserState($case\u index',$case\u index);
$app->setUserState('current_case',$cases_arr[$case_index]);
}
标题(“内容类型:text/html;字符集=utf-8”);
打印$app->getUserState('current_case');
$app->close();
}
}
不确定您是否以理想的方式完成。请按照我们的简单指南使用Joomla Ajax组件
在任何情况下,您的“examcase”视图在回显数据后应立即有一个die(),以免将控制权转移到其他地方(如果您需要更多解释,请告诉我)。不确定您是否以理想的方式进行操作。请按照我们的简单指南使用Joomla Ajax组件
在任何情况下,您的“examcase”视图在回显数据后应立即有一个die(),以免将控制权转移到其他地方(如果您需要更多解释,请告诉我)。您是否手动调用了url?它是否包含html/head/body标记?有一些插件会导致format=raw url参数出现问题,并呈现完整的HTML页面。HTML数据实际上是PHP代码中生成的片段,所以它不是一个用URL调用的完整文档。只是为了确保我们在同一个页面上:通过这个ajax URL加载的文档除了数据之外不包含任何内容?如果使用$('rc_xml_display').html(数据),行为是否有所不同;还是把这句话删掉?不,那根本没用。使用$('rc_xml_display').html(数据);实际上最终没有显示预期的数据,即使是在使用innerHTML的瞬间。我真的不相信问题出在javascript上。我相信这与Joomla MVC框架处理AJAX请求的方式有关,因为数据返回给AJAX调用的方式与我预期的完全一致。然后页面将重新加载view.html.php。这就是我不想发生的事情。调用$('rc\u xml\u display')实际上毫无意义,因为'rc\u xml\u display'不是有效的选择器。我希望#rc#uxml#显示或类似的东西。你有一个可以看到这种行为的网站吗?你是否手动调用了url?它是否包含html/head/body标记?有一些插件会导致format=raw url参数出现问题,并呈现完整的HTML页面。HTML数据实际上是PHP代码中生成的片段,所以它不是一个用URL调用的完整文档。只是为了确保我们在同一个页面上:通过这个ajax URL加载的文档除了数据之外不包含任何内容?如果使用$('rc_xml_display').html(数据),行为是否有所不同;还是把这句话删掉?不,那根本没用。使用$('rc_xml_display').html(数据);实际上最终没有显示预期的数据,即使是在使用innerHTML的瞬间。我真的不相信问题出在javascript上。我相信这与Joomla MVC框架处理AJAX请求的方式有关,因为数据返回给AJAX调用的方式与我预期的完全一致。然后页面将重新加载view.html.php。这就是我不想发生的事情。调用$('rc\u xml\u display')实际上毫无意义,因为'rc\u xml\u display'不是有效的选择器。我希望#rc#uxml#显示或类似的东西。你有一个可以看到这种行为的网站吗?我假设“die”是指close(),我肯定包括:[code]标题(“内容类型:text/html;charset=utf-8”);打印$app->getUserState('current_case');$app->close();[code]No-die表示
die()代码>。此外,由于这是一个自定义组件,而且我对Joomla MVC框架的理解是“每页一个组件”,因此我不知道如何将com_ajax与我的组件结合使用,但我将阅读您发布的页面。我在此应用程序中实现的其他ajax调用与JFactory::getApplication()配合使用效果非常好->close();完成数据回显(回显数据的位置)后,添加die()代码>在末尾。试试看,我猜“死”是指close(),我肯定包括了:[code]head
public function display($tpl = null)
{
$app = JFactory::getApplication();
$getdata = $app->input->get('getdata');
$case_index = !empty($app->getUserState('case_index')) ? $app->getUserState('case_index') : 0;
if ($getdata == 'nextcase' || $getdata == 'previouscase' || $getdata == 'initialcase') {
$app->setUserState('active_tab', 'browsecases');
$cases_arr = $app->getUserState('rc_cases');
switch ($getdata) {
case 'nextcase': $case_index++; break;
case 'previouscase': $case_index--; break;
case 'initialcase': $case_index = 0; break;
case 'default': break;
}
if ($case_index < 0) {
$case_index = 0;
$msg = 'You have reached the first case in the result set.';
$app->enqueueMessage($msg, 'warning');
}
if ($case_index >= count($cases_arr)) {
$case_index = count($cases_arr)-1;
$msg = 'You have reached the last case in the result set.';
$app->enqueueMessage($msg, 'warning');
}
if ( !empty($cases_arr[$case_index]) ) {
$app->setUserState('case_index', $case_index);
$app->setUserState('current_case', $cases_arr[$case_index]);
}
header("Content-Type: text/html; charset=utf-8");
print $app->getUserState('current_case');
$app->close();
}
}