【发布时间】:2017-03-24 22:25:29
【问题描述】:
我很难让下面的 ajax 调用在我的 Joomla 3.6 组件中工作。下面的 javascript 函数的工作原理是它确实返回数据并将其显示在页面中——一瞬间——然后页面重新加载,我得到 view.html.php 的结果,这不是我的这里需要。无论我将 async 属性设置为 true 还是 false,我都会得到相同的结果。将 async 设置为 true 会更快地发生。 view.raw.php 中返回的数据很好。我必须避免重新加载 view.html.php。 javascript函数getCase()由按钮的“onclick”调用,我总是在测试之前清除缓存。 谢谢。
function getCase(getDataVal)
{
var examcaseid = ($('examcase_id')) ? $('examcase_id').value : -1;
jQuery.ajax({
type: 'GET',
url: 'index.php?option=com_casecreator&view=examcase&format=raw&layout=edit&id='+examcaseid+'&getdata='+getDataVal,
dataType: 'html',
contentType: 'text/html; charset=\"utf-8\"',
async: true,
success: function (data, status, jq) {
$('rc_xml_display').innerHTML = data;
//alert('In getCase(), rc_xml_display is: '+$('rc_xml_display').innerHTML);
},
error: function (jq, status, e) {
alert('Unable to retrieve case.'+JSON.stringify(jq));
}
});
return;
}
view.raw.php 中的整个 display() 函数:
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();
}
}
【问题讨论】:
-
你手动调用了url吗?它是否包含 html/head/body 标签?有一些插件会导致 format=raw url 参数出现问题,而是呈现完整的 HTML 页面。
-
html数据实际上是PHP代码中生成的一个片段,所以并不是一个完整的文档,用URL调用。
-
只是为了确保我们在同一页面上:您通过此 ajax url 加载的文档除了您的数据之外不包含任何其他内容?如果您使用 $('rc_xml_display').html(data); 行为会有所不同吗?还是把这条线注释掉?
-
不,这根本没有帮助。使用 $('rc_xml_display').html(data);实际上最终没有显示预期的数据,即使在使用innerHTML时我得到它的瞬间。我真的不相信问题出在javascript上。我相信这与 Joomla MVC 框架处理 AJAX 请求的方式有关,因为数据完全按照我的预期返回给 AJAX 调用。然后页面重新加载 view.html.php。那是我不希望发生的事情。
-
调用 $('rc_xml_display') 实际上没有任何意义,因为 'rc_xml_display' 不是有效的选择器。我希望#rc_xml_display 或类似的东西。你有一个可以看到这种行为的网站吗?