【问题标题】:ajax call to Joomla 3 returns Internal Server Error 500对 Joomla 3 的 ajax 调用返回内部服务器错误 500
【发布时间】:2016-01-17 18:07:47
【问题描述】:

我将自己的工作组件从 Joomla 1.5 移植到 3.4。进行了一些微不足道的更改,例如 JComponent 到 JComponentLegacy,JView 到 JViewLegacy 等。但是,ajax 调用现在返回错误 500,我找不到任何其他信息来解决它。

这是 PHP 生成的视图:

<script type="text/javascript" src="//code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
(function ($) {
    $(document).on('click', 'input[type=submit]', function () {
        var value = $('input[name=data]').val();
        $.ajax({
            type: 'GET',
            url: 'index.php',
            data: 'option=com_mystatus&task=getstatus&data=' + value + '&format=raw&controller=ajax.raw',
            success: function (response) {
            $('.status').html(response.replace(/\"/g, ""));
        }
    });
    return false;
});
})(jQuery)
</script>
<form>
    <span class="contentheading">The Status</span>
    <br /><br />Product key:&nbsp;
    <input type="text" name="data" />
    <input type="submit" value="Display Status" />
    <br /><br />
</form>
<div class="status"></div>

这里是 ajaxraw.php 控制器:

<?php
defined('_JEXEC') or die( 'Restricted access' );
jimport('joomla.application.component.controller');

class MyStatusControllerajaxraw extends JControllerLegacy
{
    function getstatus()
    {
        echo 'this is OK'; // this was simplified for test purposes
    }
}
?>

您能看到导致错误 500 的原因吗?如果没有,您能否推荐如何调试此问题?

【问题讨论】:

  • console.log(value);?浏览器通过访问index.php?option=com_mystatus&amp;task=getstatus&amp;data=5&amp;format=raw&amp;controller=ajax.raw 会返回什么(例如数据5 的样本值)?请问是什么让您选择 GET 提交表单?
  • 是的,我试过console.log,也试过在php.ini中打开调试,但似乎连getstatus()函数都没有命中。我怀疑 jimport 或 smth else 与 Joomla 3 不兼容,因为它适用于 1.5。
  • 浏览器返回:View not found [name, type, prefix]: mystatus, raw, mystatusView
  • 但它存在:类 MyStatusViewMyStatus 扩展了文件 components/com_mystatus/views/mystatus/view.html.php 中的 JViewLegacy。是否有可能因为 Joomla 1.5 和 3.4 更改了组件文件夹结构而找不到该文件?

标签: php ajax joomla controller


【解决方案1】:

将此用于您的数据字符串:

'option=com_mystatus&task=ajax.getstatus&data=' + value + '&format=raw'

具体来说,您需要调用 ajax.getstatus 任务,该任务将调用 MyStatusControllerAjax 控制器,其文件名应为 ajax.raw.php 以指定该控制器专门用于原始格式。 Joomla 3.x 不使用控制器查询字符串来路由到控制器,任务字符串是路由到特定控制器的主要方式。

【讨论】:

  • 感谢您提供的信息!但是,仍然返回错误 500。正如我上面提到的:500 View not found [name, type, prefix]: mystatus, raw, mystatusView。这是更新的请求:“thesite.com/index.php/component/mystatus/…”。以前(在 Joomla 1.5 中)文件名为 ajaxraw.php。我尝试将其重命名为 ajax.raw.php,并复制到父文件夹等。尝试均未成功。
【解决方案2】:

今天我注意到其他一些 Joomla 3.4 组件将海关控制器放入“控制器”子文件夹中。所以,我做了同样的事情:创建子文件夹,并将 ajax.raw.php 文件移到那里。我还使用了 Michael 建议的 URL:mysite.com/index.php?option=com_mystatus&task=ajax.getstatus&data=7&format=raw。瞧!现在一切正常!非常感谢迈克尔!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-16
    • 2016-06-19
    • 1970-01-01
    • 2016-09-16
    • 2019-11-12
    • 2016-08-20
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多