2011-06-09 63 views
1

我想为joomla 1.6做一个jquery ajax模态登录模块。应该有这样的证书传递扔ajax由PHP文件证明。 但幸好似乎没有执行。我的AJAX看起来它遵循joomla登录模块不会触发证书发送它扔ajax!

$.ajax({ 
type: "POST", 
url: "do-login.php", // Send the login info to this page 
data: "username="+$('#username').val()+"&password="+$('#password').val(), 
success: function(msg){ } 

和接收器PHP文件

<?php 
// No direct access to this file 
/* Initialize Joomla framework */ 

defined('_JEXEC') or die; 
jimport('joomla.application.application'); 

$mainframe = JFactory::getApplication(); 
$post_username = JRequest::getVar($username); 
$post_password = JRequest::getVar($password); 



$data['username'] =$post_username; 
$data['password'] = $post_password; 

$mainframe->login($data, $option); 
if (!JError::isError($error)) { 
     echo 'OK'; 
    } else { 
      echo '<div id="notification_error">The login info is not correct.</div>'; 

    } 





?> 

如果我删除定义(_JEXEC)的代码不会被加载的具体类的Joomla。


我这么认为。一切都必须通过joomla的index.php。 但是如果我使用标准的joomla com_users组件,我可以实现我的目标吗?

回答

0

您是否尝试过以下格式以进行发布查询?

$.post('do-login.php', { username: $('#username').val(), password: $('#password').val()}, function (data) { 

}); 
2

您不能直接调用PHP文件;你正试图完成defined('_JEXEC') or die;位设计的目的;

你将需要建立一个组件来接收这些调用,然后吐出你想要显示的响应。假设(为了讨论的缘故)你建立com_ajax_login为你的组件,你的JavaScript是这样的:

$.post('index.php', { 
    option: 'com_ajax_login', 
    tmpl: 'component', 
    format: 'raw', 
    username: $('#username').val(), 
    password: $('#password').val(), 
    }, 
    function(response){ 
    $('#your_login_box').html(response); 
}); 

当组件吐出来的响应,它会被传递到了匿名函数的参数response,那么你可以把它放在任何你想要的地方(例如$('#your_login_box').html(response);)。还请注意请求中的formattmpl变量:这些会阻止Joomla返回完整模板。

你几乎可以将do-login.php按照原样复制到components/com_ajax_login/ajax_login.php(尽管你需要通过Joomla安装程序安装组件或者在jos_extensions中输入一个条目)。

+0

0反对接受 \t 我是这么认为的。一切都必须通过joomla的index.php。但是如果我使用标准的joomla com_users组件,那么我能实现我的目标吗? – fefe 2011-06-11 10:32:42

+0

我不确定。标准的com_users组件引发重定向。我相信(虽然不是100%肯定),这是为了确保在继续之前cookie被设置。 – jlleblanc 2011-06-11 19:37:15