使用ajax处理表单
问题描述:
我正在制作访客可以订阅邮件列表的表单。使用ajax处理表单
的代码是:
function subscribe_form() {
global $my_subme;
$form = '';
$msg = '';
if (isset($_GET['status'])) {
if ('subscribed' === $_GET['status']) {
$msg = __('Thank you for confirming your subscription', 'subme');
} else if ('unsubscribed' === $_GET['status']) {
$msg = __('You have successfully unsubscribed.', 'subme');
} else {
$msg = __('Sorry, but something went wrong.', 'subme');
}
$form .= '<p>';
$form .= esc_html($msg);
$form .= '</p>';
} else {
/* Process the form when submitted */
if ((isset($_POST['subscribe']) || isset($_POST['unsubscribe'])) && isset($_POST['source']) && 'widget' === $_POST['source']) {
/* Check nonce */
if (! isset($_POST['subme_widget_nonce']) || ! wp_verify_nonce($_POST['subme_widget_nonce'], 'subme_widget')) {
return;
}
if (! isset($_POST['email'])) {
return;
}
if (! $my_subme->is_valid_email(strtolower($_POST['email']))) {
$msg = __('Sorry, but this does not seem like a valid email address.', 'subme');
} else {
if (isset($_POST['subscribe'])) {
$msg = $my_subme->subscribe($_POST['email']);
} else {
$msg = $my_subme->unsubscribe($_POST['email']);
}
}
}
$form .= '<form method="post">';
$form .= wp_nonce_field('subme_widget', 'subme_widget_nonce', true, false);
$form .= '<input type="hidden" name="source" value="widget" />';
$form .= '<p>';
$form .= __('Your email address:', 'subme') . '<br />';
$form .= '<input type="text" name="email" /><br /><br />';
$form .= '<input type="submit" name="subscribe" value="' . __('Subscribe', 'subme') . '" />';
$form .= ' ';
$form .= '<input type="submit" name="unsubscribe" value="' . __('Unsubscribe', 'subme') . '" />';
$form .= '</p>';
$form .= '</form>';
if (strlen($msg) > 0) {
$form .= '<p>';
$form .= esc_html($msg);
$form .= '</p>';
}
}
echo $form;
echo '</div>';
}
subscribe_form();
如何改变这种代码,以便它使用AJAX处理?正如你所看到的,当前用户提交表单时,它只是简单的页面刷新。
答
如果你有两个提交,只有第二个将被发送到表单...你需要做一些类似于2的表单,或添加一个onclick事件来更改名称或类型或隐藏值...类似于:
<input type="submit" onclick="document.getElementById('action').value='subscribe'" value="Subscribe" />
<input type="submit" onclick="document.getElementById('action').value='unsubscribe'" value="Unsubscribe" />
<input type="hidden" name="action" id="action" />
答
1.-您的代码显示的是php,好的。这是服务器端。
2.-从客户端。你应该有代码的JavaScript发送到服务器,数据说这个客户端要订阅。
+0
当考虑我的代码时,javascript代码将如何显示?你能提供代码示例吗? – 2014-12-01 18:43:35
为什么这是一个函数? – 2014-12-01 17:16:12
我将表单添加到插件中(这与我的问题无关):) – 2014-12-01 17:16:56