Joomla 3.3 AJAX call


Joomla 3.3 AJAX call

以下代码在我的view/tmpl/edit.php中:

<script type="text/javascript">            
            jQuery("#button").click(function(){
                jQuery.ajax({
                    url:'somefile.php',
                    type:'POST',
                    data: {action:"1"},
                    success: function(response) {alert(response);}
                });
            });        
        </script>

在同一个文件夹中,我有somefile.php,代码如下:

 if (isset($_POST['action'])) {
        SomeFunction();
 }
 function SomeFunction()
 {
    ...do something
 }

我的问题是,当我按下按钮时,它永远不会访问somefile.php,尽管脚本已经执行(通过警报进行检查)。我在这里做错了什么?

请给我看一些相关的示例代码。

谢谢。

  1. 如果你调用"somefile.php"作为你的URL,它将等同于你在Joomla中浏览的当前URL+文件名。它不会映射到文件的路径

    例如,如果您在网站的首页,即http://example.com,AJAX请求将转到
    http://example.com/somefile.php

    ,而在http://example.com/blog/mypost01的页面上,它将映射到http://example.com/blog/somefile.php

    这两者都是错误的,因为您的文件实际上位于以下位置:

    http://example.com/components/com_mycomponent/view/tmpl/somefile.php

  2. 首先,我会使用Charles这样的代理来监控整个requestresponse,循环这应该会让你清楚地了解发生了什么以及整个请求/重定向/响应循环。

  3. 确保Error Reporting一直打开到Development,并启用Joomla DEBUG模式,这样您可能会看到错误,而不是返回200结果。

  4. 某些Joomla 3 htaccess配置和安全扩展(AdminTools)将阻止直接访问php文件。如果这是问题所在,那么这可能是你以不安全/不正确的方式进行操作的迹象。

  5. 由于您使用的是Joomla3.3,请阅读JoomlaDoc网站上的使用JoomlaAjax接口。

  6. 最后,当您似乎正在构建自己的组件时,您可以/应该通过组件将AJAX调用传递给合适的控制器中的方法,而不是直接访问PHP文件。