我试图在WP插件上创建一个插件,然后使用在线插件。
我对插件的ajax部分(它是一个电子邮件列表构建器)有严重的困难。
这是我的.js jQuery代码,应该在localhost上运行一些php代码,并在警告窗口中显示成功/错误消息:
jQuery(document).ready(function($){
var wpajax_url = document.location.protocol + '//' + document.location.host + 'wordpress_plugin_course/wp-admin/admin-ajax.php?action=plb_save_subscribtion';
$('form.plb-form').bind('submit', function(){
$form = $(this);
var form_data = $form.serialize();
$.ajax({
'method':'post',
'url':wpajax_url,
'data':form_data,
'dataType':'json',
'cache':false,
'success':function( data, textStatus ){
if( data.status == 1 ){
$form[0].reset();
alert(data.message);
} else{
var msg = data.message +'\r'+ data.error + '\r';
$.each(data.errors,function(key,value){
msg += '\r';
msg += '- ' + value;
});
alert( msg );
}
},
'error':function(jqXHR, textStatus, errorThrown){
}
});
return false;
});
});
php部分(是的,订阅其中的B是故意的,因为我在格式上遇到了问题,我认为在所有情况下都更容易坚持B)。
add_action('wp_ajax_nopriv_plb_save_subscribtion', 'plb_save_subscribtion');
add_action('wp_ajax_plb_save_subscribtion', 'plb_save_subscribtion');
add_action('wp_enqueue_scripts', 'plb_public_scripts');
function plb_public_scripts(){
wp_register_script('profi-list-builder-js-public', plugins_url('/js/public/profi-list-builder.js', __FILE__ ), array('jquery'),'1.0',true);
wp_enqueue_script('profi-list-builder-js-public');
}
我没有显示plb_save_subscribtion函数,因为它共有数百行代码并且代码工作正常:它将新订阅保存到管理区域中的订阅帖子,然后以.json格式将成功/错误消息返回给客户。
我现在需要jQuery做的是通过ajax发布并将相同的plb_save_subscribtion响应客户端放入警报窗口。
我一整天都在谷歌上搜索,试图解决这个问题,但无济于事。我没有想法,所以Iam在这里发布。这段代码有问题吗?如果没有,我应该在哪里寻找问题(因为代码是复制/粘贴的,应该工作正常,但它没有)?如果我在函数顶部放置一条简单的警报消息,警告消息就会显示出来。但是当我按下表单上的提交时,页面重新加载,我在.json中收到消息,没有警报窗口,没有ajax。有人?
答案 0 :(得分:0)
在插件文件中添加以下代码
add_action( 'wp_enqueue_scripts', 'ajax_test_enqueue_scripts' );
function ajax_test_enqueue_scripts() {
wp_enqueue_script( 'custom', plugins_url( '/custom.js', __FILE__ ), array('jquery'), '1.0', true );
wp_localize_script( 'custom', 'postCustom', array(
'ajax_url' => admin_url( 'admin-ajax.php' ))
);
}
function plb_save_subscribtion(){
print_r($_POST['form_data']);
}
add_action('wp_ajax_nopriv_plb_save_subscribtion', 'plb_save_subscribtion');
add_action('wp_ajax_plb_save_subscribtion', 'plb_save_subscribtion');
在js文件中添加以下内容(此处为custom.js)
jQuery('form').bind('submit', function(){
var form_data = jQuery(this).serialize();
jQuery.ajax({
url : postCustom.ajax_url,
type : 'post',
data : {
action : 'plb_save_subscribtion',
form_data : form_data
},
success : function( response ) {
alert(response);
}
});
});
试试这种方式。您可以在警报窗口中查看表单数据。