2011-06-09 53 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