ajax在wordpress中将表单提交到数据库

时间:2014-05-19 15:53:17

标签: jquery ajax wordpress wordpress-plugin

我已经阅读了我可以从搜索中找到的所有内容,并且有很多答案,但我无法使用我正在使用的代码来理解它们中的任何一个。我需要知道我做错了什么。最大的问题是我是业余爱好者,而ajax是我的知识基础之外的。

我在这里提出的代码基本上就是我从本教程http://www.makeuseof.com/tag/tutorial-ajax-wordpress/获得的代码。我已经使用另一个类似的代码从上面开始上传:http://www.inkthemes.com/how-to-use-ajax-in-wordpress-for-data-insertion/08/,但我以后无法清除字段。我认为这个版本可能会因某些原因减少麻烦。我希望链接到这方面的教程或我尚未找到的问题的答案,但大多数我想知道为什么这不起作用,所以我可以理解发生了什么。

当我点击提交时,页面移动到myurl /?name = saldkfl& action = postlesson& s =并且没有任何内容插入到数据库中。

这是我的表格:

public function show_form(){
?>
<form type="post" name="submitlesson" action="" id="submitlesson">
<input type="text" name="name" id="name" />
<input type="age" name="age" id="age" />
<input type="hidden" name="action" value="postlesson"/>
<input type="submit" /> 

<div id="feedback">
</div>
<?php
}

这是php代码      ADD_ACTION(     &#39; plugins_loaded&#39 ;,     数组(B5F_SO_13498959 :: get_instance(),&#39; plugin_setup&#39;)     );

class B5F_SO_13498959
{
private $cpt = 'post'; # Adjust the CPT
protected static $instance = NULL;
public $plugin_url = '';
public function __construct() {}

public static function get_instance()
{
    NULL === self::$instance and self::$instance = new self;
    return self::$instance;
}

/**
 * Regular plugin work
 */
public function plugin_setup()
{
    $this->plugin_url = plugins_url( '/', __FILE__ );
add_shortcode('the_content', array($this, 'show_form'));
    add_action( 'wp_enqueue_scripts', array( $this, 'enqueue' ) );
    add_action( 'wp_ajax_postlesson', array( $this, 'postlesson' ) );
    add_action( 'wp_ajax_nopriv_postlesson', array( $this, 'postlesson' ) );
}


public function enqueue()
{
//Include Javascript library
wp_enqueue_script('lessonupload', "{$this->plugin_url}demo.js" , array( 'jquery' ));
// including ajax script in the plugin Myajax.ajaxurl
wp_localize_script( 'lessonupload', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php')));
} 

public function postlesson(){
global $wpdb;
$name = $_POST['name'];
$age = $_POST['age'];

if($wpdb->insert('wp_demo',array(
'name'=>$name,
'age'=>$age
))===FALSE) {
echo "error";
}
else {
echo "success";
}
die();
}

}

我的jQuery

 jQuery('#submitlesson').submit(ajaxSubmit);
 function ajaxSubmit () {

 var submitlesson = jQuery(this).serialize();

    jQuery.ajax({
        type: 'POST',
        url: 'MyAjax.ajaxurl',
        data: ({action  : 'postlesson'}),
        success: function(data){
            jQuery("#feedback").html('data');
        }
    });
 return false;
 }

请帮忙!谢谢。

2 个答案:

答案 0 :(得分:1)

您尚未在JS ajax代码中传递操作值。

您的JS代码需要

jQuery('#submitlesson').submit(ajaxSubmit);
function ajaxSubmit () {
    var submitlesson = jQuery(this).serialize();
    jQuery.ajax({
               type: 'POST',
               url: MyAjax.ajaxurl,
               data: ({action  : 'postlesson'}),
               success: function(data){
                   jQuery("#feedback").html('data');
               }
    });
    return false;
}

同时确认插入记录的表名与代码中的相同

答案 1 :(得分:0)

如果有人有类似的问题,并且一次尝试学习所有这些。我最终通过避免序列化数据来解决这个问题。在序列化或在formData中,我从来没有想过要让动作部分正确,但这有效:

jQuery(document).ready(function(){
jQuery("#submit").click(function(){
var name = jQuery("#dname").val();
var age = jQuery("#age").val();
jQuery.ajax({
type: 'POST',   // Adding Post method
url: MyAjax.ajaxurl, // Including ajax file
data: {"action": "postlesson", "dname":name, "age":age, "myfile":File}, // Sending data dname to post_word_count function.
success: function(response){ // Show returned data using the function.
jQuery("#feedback").html(response);
}
});
jQuery('[name="age"]').val('');   // empties the field after submit
jQuery('[name="dname"]').val('');
});
});

作为补充说明,事实证明我根本不需要通过插件功能页面来处理它。我需要上传一个文件以及提交这个数据,这意味着使用formData,但是我无法正确获取action元素,所以我只是将url设置为插件文件夹中的php文件而不是ajaxurl并且它有效。我在php文件的顶部需要一行代码:require_once(&#39; ../../../ wp-load.php&#39;);

它不漂亮。我宁愿通过动作功能发送它,但这就完成了。