以下代码在我的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,尽管脚本已经执行(通过警报进行检查)。我在这里做错了什么?
请给我看一些相关的示例代码。
谢谢。
-
如果你调用"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
-
首先,我会使用Charles这样的代理来监控整个
request
和response
,循环这应该会让你清楚地了解发生了什么以及整个请求/重定向/响应循环。 -
确保
Error Reporting
一直打开到Development
,并启用Joomla DEBUG模式,这样您可能会看到错误,而不是返回200
结果。 -
某些Joomla 3
htaccess
配置和安全扩展(AdminTools)将阻止直接访问php
文件。如果这是问题所在,那么这可能是你以不安全/不正确的方式进行操作的迹象。 -
由于您使用的是Joomla3.3,请阅读JoomlaDoc网站上的使用JoomlaAjax接口。
-
最后,当您似乎正在构建自己的组件时,您可以/应该通过组件将AJAX调用传递给合适的控制器中的方法,而不是直接访问PHP文件。