2013-08-24 50 views
0

我有一個組件和一個模塊。刷新Joomla模塊中的Ajax按鈕

該模塊有:

<form action="#" method="post" name="signup"> 
    <input type="text" name="address" id="address" value="Enter email address" size="30" /> 
    <input type="submit" name="submit" value="Signup" /> 
    <div id="msg"></div> 
</form> 

<script type="text/javascript"> 

window.addEvent('domready', function(){ 
    $('signup').addEvent('submit', function(e) { 
    //Prevent the submit event 
    new Event(e).stop(); 
    var address = $('address').value; 
    // check email using regex 
    var address_regex = /^[a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; 
    if(!address_regex.test(address)){ $('msg').innerHTML = 'Please enter a valid email address.'; return; } 
    new Ajax('index.php?option=com_traincomponent&task=adduser&template=raw', { 
     method: 'get', 
     data: { 'address' : address }, 
     onRequest: function() { $('msg').innerHTML = 'Please wait...'; }, 
     onComplete: function(response) { 
     if (response != '') $('msg').innerHTML = response; 
     else msg.html('Please enter your email address.'); 
     } 
    }).request(); 
    }); 
}); 
</script> 

組件com_traincomponent有/controller/ajax.raw.php

function adduser() { 
    $app = JFactory::getApplication(); 
    $model = $this->getModel('signup'); 
    $data = $model->addUser(); 
    echo $data; 
    $app->close(); 
} 

    function signup() { 
    $address = JRequest::getVar('address', ''); 
    $msg = 'Thank you for registering!'; 
    if ($address != '') { 
    $db = &JFactory::getDBO(); 
    $address = $db->getEscaped($address); // escape the email string to prevent sql injection 
    $db->setQuery("SELECT * FROM `#__users` WHERE `email`='$address'"); 
    $db->Query(); 
    if ($db->getNumRows() != 0) $msg = 'You are already registered, thank you.'; 
    else { 
     $db->setQuery("INSERT INTO `#__users` (`name`, `username`, `email`, `usertype`, `block`, `gid`, `registerDate`) VALUES ('default', '$address', '$address', 'Registered', 0, 18, '".date('Y-m-d H:i:s')."')"); 
     $db->query(); 
     $user_id = $db->insertid(); 
     $db->setQuery("INSERT INTO `#__core_acl_aro` (`section_value`, `value`, `name`) VALUES ('users', $user_id, '$address')"); 
     $db->query(); 
     $aro_id = $db->insertid(); 
     $db->setQuery("INSERT INTO `#__core_acl_groups_aro_map` (`group_id`, `aro_id`) VALUES (18, $aro_id)"); 
     $db->query(); 
    } 
    } else { 
    $msg = 'Please enter an email address.'; 
    } 
    return $msg; 
} 

但問題是,當我點擊提交按鈕,它仍然刷新頁面並不會執行ajax功能。

我確實發現了錯誤遺漏的類型錯誤:對象的翻譯:已經沒有法「的addEvent」

任何想法?

+0

它是一個Joomla 1.5擴展被取代? – MasterAM

+0

這是一個joomla 3.1組件 – StardogBR

+0

你有這個工作嗎?哪條線給你錯誤?檢查你是否加載了mootools腳本。 – Sergio

回答

0

如果這確實是一個Joomla! 1.5擴展,它很可能使用MooTools 1.1.x.

在這種情況下,適當的選擇應該是:

$$('form[name=signup]') 

你的代碼的其餘部分可能應該工作。

您的錯誤是由於原始選擇器返回null而引起的。

+0

不,它是一個joomla 3.1組件 – StardogBR

+0

您將它構建爲1.5擴展,並且在可用之前您需要進行一些修改。 Riccardo的回答是朝着正確方向邁出的一步。出於好奇,是什麼讓你這樣寫的?有沒有教程聲稱是J! 3.x兼容並指示人們以這種方式編寫擴展名? – MasterAM

+0

用戶fiels也都是錯誤的,您需要使用自1.6版以來一直在使用的用戶管理表和字段。 – Elin

1

在Joomla 3.1中,我們可以假設你的模板已經加載了jQuery,而$實際上是jQuery? 而代碼反而絕對來自基於mootools的1.5實現?

如果是這樣,基於「名稱」,如$('註冊')的選擇器根本不起作用,並且添加id如「fsignup」等ID肯定會有所幫助。下面我列出幾個建議,你真的需要重構整個事情;我可能錯過了一些東西有這麼大的修正:爲了使我已經爲前綴的錯誤路線這個更具可讀性與 X

Mootools的jQuery的:

X window.addEvent('domready') 

可能成爲

jQuery(function() { 
    // code that will be run after dom tree is initialized 
}); 

X $('signup').addEvent('submit', function(e) { ... 

將成爲

$('#fsignup').submit(function(e) { ... 

在通信側

X new Ajax 

可以與

$.get(

的Joomla 1代替。5比3

功能:

X $address = $db->getEscaped($address) 

已被廢棄,應

$address = $db->quote($address); 

的查詢字符串從建,我沒有檢查,但可能會有一些轉義值,請記住

$db->quote() for values 
$db->quoteName() for column names 

輸入被解析爲

X JRequest::getVar() 

它也被棄用;但除了被棄用,它在J2.5實現完全,所以你應該使用

JFactory::getApplication()->input->get... 

功能

X $db->Query() 

違抗我的記憶中,它使用的是$ DB->查詢,但現在它應該是:

$db->execute() 

當您運行插入或更新;而如果要檢索的數據,之後你$ DB-> setQuery(),你應該

$db->loadResult() 

$db->loadObjectList() 

或暴露用於返回數據作爲陣列等

其他實用程序的方法之一

最後,控制器援引了你沒有提供一個模型,並且在用相同的名稱(註冊)控制器的方法,也許你有一個有點查詢股價的有太多:

函數addUser()正在嘗試加載模型「註冊」並在其上調用addUser()方法;並且註冊功能只是坐在那裏,而不是由您的代碼調用。

的Joomla參數:

X &template=raw 

&format=raw 

&tmpl=component