2014-12-10 2 views
0

Я пытаюсь получить электронное письмо пользователя и сохранить его в базе данных с помощью 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; 
    } 
} 
+0

Любые ошибки консоли? – rnevius

+0

Предоставьте ссылку html и js, чтобы мы могли проверить проблему. –

+0

Я предоставил полный код. Взгляните на него. Спасибо – phil

ответ

0

Это приведет к успеху, потому что URL-адрес правильный.

Ошибка в коде находится здесь action: 'ajaxurl',

добавить add_action('wp_ajax_ajaxurl', 'my_action_callback'); своим ajaxurl и function my_action_callback(){}

+0

Я пробовал, он, похоже, не работал. В базе данных не было данных. – phil

+0

check in функция 'my_action_callback', если' $ _POST' или '$ _GET' работают или еще лучше, используйте' $ _REQUEST'. ИЛИ, может быть, 'formData' не имеет значения. Есть множество параметров отладки, которые вы можете сделать, например URL, пустые переменные, запросы и т. Д. Также проверьте документацию ajax [здесь] (http://codex.wordpress.org/AJAX_in_Plugins) – Vincent815

+0

Спасибо. Я пробовал предложения .Ajax возвращается успешно, но это не вызывает действие, и я заметил, что данные $ _POST не извлекаются my_callback-действием в functions.php .it говорит о неопределенном индексе 'email'. Входное письмо отправляется из формы, расположенной в моем файле widget-subscribe.php, используя метод = 'post' – phil

Смежные вопросы