Javascript Wordpress数据库未插入通过Ajax发布的值

Javascript Wordpress数据库未插入通过Ajax发布的值,javascript,php,jquery,ajax,wordpress,Javascript,Php,Jquery,Ajax,Wordpress,我正在尝试检索用户的电子邮件,并使用Ajax将其存储在数据库中。在ajax请求之后,我可以在控制台中看到表单值,但它不会将数据存储在数据库中。除了数据库中没有存储任何东西外,其他一切都可以正常工作。非常感谢您的帮助。您可以使用任何默认Wordpress Twenty14安装来测试这一点。我提供以下文件。subsc.js是订阅脚本,发送信息的函数位于functions.php文件中,我的订阅小部件已经包含在内。复制和过去 class subscribeFm extends WP_Widget

我正在尝试检索用户的电子邮件,并使用Ajax将其存储在数据库中。在ajax请求之后,我可以在控制台中看到表单值,但它不会将数据存储在数据库中。除了数据库中没有存储任何东西外,其他一切都可以正常工作。非常感谢您的帮助。您可以使用任何默认Wordpress Twenty14安装来测试这一点。我提供以下文件。subsc.js是订阅脚本,发送信息的函数位于functions.php文件中,我的订阅小部件已经包含在内。复制和过去

  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;
    }
}


?>
下面的代码处理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'))); 
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代码

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;
    }
}

这将导致成功,因为url是正确的

代码中的错误在此处操作:“ajaxurl”


添加add_action“wp_ajax_ajaxurl”、“my_action_callback”;到您的ajaxurl和函数my_action_callback{}

提供您的html和js链接,以便我们检查问题我已经提供了完整的代码。请看一看。谢谢我尝试过,它似乎不起作用。数据库中没有存储数据检查my_action_callback函数如果$\u POST或$\u GET起作用,或者更好的是,使用$\u REQUEST。或者formData没有任何价值。有很多调试选项,比如url、空变量、查询、,等等。也请检查ajax的文档谢谢。我尝试了这些建议。ajax成功返回,但它没有调用操作&我注意到functions.php中的my_callback-action没有检索$u POST数据。它显示未定义的索引“email”。输入的电子邮件是从我的widget-subscribe.php文件中的一个表单发送的,使用的是method='post'try$\u REQUEST not$\u post-try REQUEST,得到了相同的结果。如果有机会,请在wordpress Twenty14主题中尝试上述代码,您可以复制并粘贴它。并测试它是否适合您。谢谢