我在这里搜索了这样做的方法,但只询问了简单的Ajax提交表单。
如果有人不熟悉poMMo,它是一个邮件列表管理软件,允许开发人员在网站上实现自定义表单,仅用于收集邮件列表的电子邮件。是否可以将Ajax和poMMo表单合并在一起?
我一直在使用的代码是:
test.php的
<form action='_test.php' method='post' class='ajaxform'>
<input type='text' name='txt' value='Enter e-mail address'>
<input type='submit' value='submit'>
</form>
</head>
<div id='testDiv'></div>
_test.php
<?php
$arr = array( 'testDiv' => $_POST['txt'] );
echo json_encode( $arr );
?>
jsFile.js
jQuery(document).ready(function(){
jQuery('.ajaxform').submit( function() {
$.ajax({
url : $(this).attr('action'),
type : $(this).attr('method'),
dataType: 'json',
data : $(this).serialize(),
success : function( data ) {
for(var id in data) {
jQuery('#' + id).html( data[id] );
}
}
});
return false;
});
});
我会不断回来回答任何问题,并为愿意提供帮助的人提供信息。谢谢,麻烦您了。 :)
答案 0 :(得分:1)
以下是我创建的代码:
<form action="" name="signup">
<fieldset>
<legend>Subscribe</legend>
<div>
<label for="email"><strong>Your Email:</strong></label>
<input type="text" name="Email" id="email" maxlength="60" />
</div>
</fieldset>
<div id="buttons">
<input type="hidden" id="pommo_signup" name="pommo_signup" value="true" />
<input type="submit" class="button" value="Subscribe" />
</div>
</form>
// JavaScript Document
$(document).ready(function() {
$('.button').click(function() {
var email = $("input#email").val();
var pommo_signup = $("input#pommo_signup").val();
var data = 'Email='+ email + '&pommo_signup='+ pommo_signup;
$.ajax({
type: 'POST',
url: 'http://localhost/pommo/user/process.php',
data: data,
dataType: 'json',
success: function(json){
if (!json.success){
alert(json.errors);
} else {
$("form").html("<div id='message'></div>");
$('#message').html('<h2>Subscription Received!')
.append("<p>We will be in touch soon.</p>")
.hide()
.fadeIn(1500);
}
},
error: function(json){
}
});
return false;
});
});
您还需要将此添加到PoMMo process.php文件中,以便从请求中获取JSON数据:
/**********************************
JSON OUTPUT INITIALIZATION
*********************************/
Pommo::requireOnce($pommo->_baseDir.'inc/classes/json.php');
$json = new PommoJSON();
我通过调用位于/inc/classes/json.php中的json.php文件中的fail方法将我的主要错误消息放入process.php的验证部分:
/**********************************
VALIDATE INPUT
*********************************/
if (empty ($_POST['pommo_signup']))
Pommo::redirect('login.php');
$subscriber = array(
'email' => $_POST['Email'],
'registered' => time(),
'ip' => $_SERVER['REMOTE_ADDR'],
'status' => 1,
'data' => @$_POST['d'],
);
// ** check for correct email syntax
if (!PommoHelper::isEmail($subscriber['email'])){
$json->fail(Pommo::_T('Invalid e-mail address. Please try again.'));
}
// ** check if email already exists in DB ("duplicates are bad..")
if (PommoHelper::isDupe($subscriber['email'])) {
$json->fail(Pommo::_T('Error the email already exists in the database.'));
}
最后,在将电子邮件发送给process.php的添加订阅者部分中的用户之后,我将成功消息发送到了:
如果订阅需要确认:
// send confirmation message.
if (PommoHelperMessages::sendMessage(array('to' => $subscriber['email'], 'code' => $subscriber['pending_code'], 'type' => 'confirm'))) {
$subscriber['registered'] = date("F j, Y, g:i a",$subscriber['registered']);
if ($comments || isset($notices['pending']) && $notices['pending'] == 'on')
PommoHelperMessages::notify($notices, $subscriber, 'pending', $comments);
$json->success(Pommo::_T('Subscription request received.'));
if ($config['site_confirm'])
Pommo::redirect($config['site_confirm']);
}
如果不是这里也在这里...
else {
// send/print welcome message
PommoHelperMessages::sendMessage(array('to' => $subscriber['email'], 'type' => 'subscribe'));
$subscriber['registered'] = date("F j, Y, g:i a",$subscriber['registered']);
if ($comments || isset($notices['subscribe']) && $notices['subscribe'] == 'on')
PommoHelperMessages::notify($notices, $subscriber, 'subscribe',$comments);
$json->success(Pommo::_T('Subscription request received.'));
// redirect
if ($config['site_success'])
Pommo::redirect($config['site_success']);
}
我最终没有使用成功消息,但你需要运行success方法将其变为true而不是false,否则json.success将永远不会是假的。
如果有帮助,请告诉我!