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