我已经阅读了我可以从搜索中找到的所有内容,并且有很多答案,但我无法使用我正在使用的代码来理解它们中的任何一个。我需要知道我做错了什么。最大的问题是我是业余爱好者,而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;
}
请帮忙!谢谢。
答案 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;);
它不漂亮。我宁愿通过动作功能发送它,但这就完成了。