使用PHP函数的jQuery Ajax返回HTML代码

我正在使用Joomla,我打算在Joomla用户表的数据库中检查是否正确通过代码来执行注册。

好吧,3天前我正在尝试使用调用php函数的ajax函数。 当我尝试从服务器(php函数)读取响应时,只能获取HTML页面。 不知道发生了什么。 我看了几篇文章和问题,但仍然不知道发生了什么。

我正在做的是当在给定字段中检测到写入时,执行检查数据库中是否存在代码的function

我不确定我是否正确访问了我的validatePartner.php

这是我的脚本:

 jQuery(document).ready( function($){ $('#jform_username').bind('input', function() { alert("FINE"); var data =" hello world"; var data2=" hello all"; $.ajax({ url: 'validatePartner.php', data: {'q': data,'z':data2}, type: "POST", success: function(data) { alert("Here: " + data); } }); }); });  

这是我的validatePartner.php:

  

我在同一目录中有这个teo文件。

谢谢你的帮助!

解:

使用@jonasfh提示,我得到了我需要的东西! 我创建了一个包含两个文件的组件,他告诉我和我使用的ajax函数:

  . . . $.ajax({ url: '?option=com_validatepartner&format=raw', . . .  

代替:

  . . . $.ajax({ url: '?option=com_validatepartner&tmpl=json', . . .  

谢谢您的帮助!

您可能应该使组件返回@MrCode概述的ajax调用。 组件可以非常简单,但至少需要2个文件(可能还有一些?):xml定义文件和入口点,如下所示:

/administrator/components/com_validatepartner/validatepartner.xml和/components/com_validatepartner/validatepartner.php

此处描述了xml文件的语法和格式。 文件validatepartner.php可以像下面这样简单:

 defined('_JEXEC') or die; #get a database object $db=JFactory::getDbo(); $db->setQuery('select * from #__thetable'); $list=$db->loadAssocList(); # you probably want to return some json-data or something: echo json_encode($list); 

现在又有一个技巧:在模板文件夹中添加以下文件:json.php

含:

 defined('_JEXEC') or die;  

现在,您可以通过以下方式测试您的组件:

index.php?option = com_validatepartner #result在普通的tmpl文件中

index.php?option = com_validatepartner&tmpl = json#使用你的json.php tmpl-file

最后调用类似于@MrCode建议的文件,只需稍加改动

 $.ajax({ url: 'index.php?option=com_validatepartner&tmpl=json', data: {'q': data,'z':data2}, type: "POST", success: function(data) { alert("Here: " + data); } }); 

还记得在joomla后端注册组件,方法是转到extensions-> extension-manager,然后转到Discovery。

尊重乔纳斯

编辑:在上面的代码和示例中将布局更改为tmpl。 还改变了一些文件布局等。

您对validatePartner.php的请求可能正在重写为Joomla! index.php文件。 无论如何,你应该创建一个原生的Joomla! 可以通过Joomla调用的组件! index.php,而不是创建单独的脚本文件。 您单独的PHP脚本将无法访问Joomla! 数据库或会话等

它会被称为:

 $.ajax({ url: 'index.php?option=com_myComponent&task=validatePartner', data: {'q': data,'z':data2}, type: "POST", success: function(data) { alert("Here: " + data); } }); 
  • 开发一个基本的Joomla! 零件

我有同样的问题。 我正在使用joomla组件中的jQuery处理依赖下拉列表。 作为调用结果的第二个下拉列表显示为空并且使用html页面加载。 最后我找到了解决方案:必需的文件应该放在组件目录之外。 因此,我们将无法获得整个html页面,但在该页面上我们必须在外部包含库。

这是图书馆:

 define( '_JEXEC', 1 ); define('JPATH_BASE', dirname(__FILE__)); define( 'DS', DIRECTORY_SEPARATOR ); require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' ); require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' ); $mainframe =& JFactory::getApplication('site'); $mainframe->initialise();