[英]Refresh Ajax Button in Joomla module
我有一个组件和一个模块。
该模块具有:
<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._-]+@[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功能。
我实际上收到了错误Uncaught TypeError:对象[object Object]没有方法'addEvent'
任何想法?
在Joomla 3.1中,我们可以假定您的模板已加载jQuery,而$实际上是jQuery吗? 而代码肯定是来自基于mootools的1.5实现吗?
如果是这样的话,基于$(例如$('signup'))之类的选择器将根本无法工作,并且添加诸如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-> query,但现在应该是:
$db->execute()
当您运行插入或更新时; 而如果要检索数据,则在$ db-> setQuery()之后,您应该
$db->loadResult()
要么
$db->loadObjectList()
或公开用于以数组等形式返回数据的其他实用程序方法之一。
最后,控制器正在调用一个您尚未提供的模型,并且控制器中有一个同名的方法(注册),也许那里也有一些混淆:
函数addUser()试图加载模型“ signup”并在其上调用方法addUser(); 而注册功能只是坐在那里,不会被您的代码调用。
Joomla参数:
X &template=raw
应该替换为
&format=raw
要么
&tmpl=component
如果确实是Joomla! 1.5扩展,最有可能使用MooTools1.1.x。
在这种情况下,适当的选择器将是:
$$('form[name=signup]')
您的其余代码可能应该工作。
造成您的错误的原因是原始选择器返回null
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.