Я пытаюсь получить электронное письмо пользователя и сохранить его в базе данных с помощью Ajax. Я вижу вид значений на консоли после запроса ajax, но он не хранит данные в базе данных. Все остальное отлично работает, за исключением того, что в базе данных ничего не хранится. Любая помощь с большой оценкой. Вы можете протестировать это, используя любую установку Wordpress TwentyFourteen по умолчанию. Я предоставляю следующие файлы. .subsc.js - это скрипт подписки, функции для отправки информации находятся в файле functions.php, и мой виджет подписки включен. Копирование и прошлоеБаза данных Wordpress, не вставляющая значения, отправленные через Ajax
class subscribeFm extends WP_Widget {
/**
* Register widget with Wordpress
*/
function __construct() {
parent::__construct(
'subscribe_widget', // Base ID
__('Newsletter Subscription', 'text_domain'), // Name
array('description' => __('Displays Subscription form', 'text_domain'),) // args
);
}
/* Front end Display of widget */
public function widget($args, $instance) {
echo $args['before_widget'];
if (! empty($instance['title'])) {
echo $args['before_title'] . apply_filters('widget_title', $instance['title']). $args['after_title'];
?>
<div>
<form id="formsub" name="subscribe" method="POST" onsubmit="return validateSub(this)">
<input id="subEmail" name="subEmail" class="input-text" placeholder="Your Email Address">
<button type="submit">Signup</button>
<p id="notifEmail" style="color:#fff"></p>
<i class="fa fa-chevron-right"></i>
</form>
</div>
<?php
}
// echo __('Subscribe to our mailing list', 'text_domain');
echo $args['after_widget'];
}
public function form($instance) {
$title =! empty($instance['title']) ? $instance['title'] : __('New title', 'text_domain');
?>
<p>
<label for="<?php echo $this->get_field_id('title'); ?>"> <?php _e('Title'); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" >
</p>
<?php
}
/**
* Sanitize widget form values as they are saved
*
*/
public function update($new_instance, $old_instance) {
$instance = array();
$instance['title'] = (! empty($new_instance['title'])) ? strip_tags($new_instance['title']) : '';
return $instance;
}
}
?>
Добавить эти строки функционировать twentyfourteen_scripts() в functions.php
/* Email Subscription queue */
wp_enqueue_script('subsc_Scripts',get_template_directory_uri() . '/js/Subsc.js', array('jquery'), 1.0, true);
wp_localize_script('subsc_Scripts', 'MySubsc', array('ajaxurl' => admin_url('admin-ajax.php')));
следующий код обрабатывает полученные данные в functions.php
add_action('wp_ajax_ph_process', 'ph_process_fm'); // ajax for logged in users
add_action('wp_ajax_nopriv_ph_process', 'ph_process_fm'); // ajax for not logged in users
// Process submission after Ajax request
function ph_process_fm($info) {
global $wpdb;
if(isset($_POST['subEmail'])) {
$subscripEmail = $_POST['subEmail'];
echo $subscripEmail . " </br>";
// $nSubEmail = $wpdb->real_escape_string($subEmail);
$wpdb->insert('wp_subscription_email', array('email' => $subscripEmail ), array('%s'));
}
die();
}
Это Javascript Code
function validateSub() {
//"use strict";
var x, exp, result, atpos, dotpos, formData;
formData = jQuery("#formsub").serialize();
x = document.subscribe.subEmail.value;
exp = /(\s|.$|.%)@(?=.)/gmi;
atpos = x.indexOf("@");
dotpos = x.lastIndexOf(".");
result = exp.test(x); // check Reg exp on input value
if (result === true || (atpos < 1 || dotpos < atpos + 2)) {
document.getElementById("notifEmail").innerHTML = "Invalid Email address"; //display error messages
document.getElementById("notifEmail").style.color="#FCFCFC";
ERR = 1;
return false;
}
else {
jQuery.ajax({
url: MySubsc.ajaxurl,
type: 'POST',
action: 'ph_process_fm',
data: formData,
success:function(response){
alert("Check your email to confirm this subscription");
alert(formData);
}
});
return false;
}
}
Любые ошибки консоли? – rnevius
Предоставьте ссылку html и js, чтобы мы могли проверить проблему. –
Я предоставил полный код. Взгляните на него. Спасибо – phil