我正在设置一个插件,该插件需要将一个变量从独立的jQuery文件传递到选项。php。我已经(我认为)设置了要在插件文件中使用的脚本,如下所示:
function ndw_js_init(){
wp_enqueue_script(\'jquery\');
wp_register_script( \'ndw_js\', plugin_dir_url( __FILE__ ) . \'/ndw_js.js\', array( \'jquery\' ), \'\', true );
wp_enqueue_script( \'ndw_js\', plugin_dir_url( __FILE__ ) . \'/ndw_js.js\', array(), \'1.0.0\', true);
$scriptdata = array(\'admin_ajax\' => admin_url( \'admin-ajax.php\' ));
wp_localize_script( \'ndw_js\', \'toremove\', $scriptdata);
}
add_action(\'admin_init\', \'ndw_js_init\');
我要解决的问题是jQuery文件。该变量在单击时传递。到目前为止,我有一个工作正常的(使用alert()进行测试):
$(\'tr td .widget-remove a\').click(function(){
var toremove = $(this).attr(\'rel\');
var url = \'options.php\'; // EDIT: Actualy, is this right? Or should the data be passed to the name of my plugin main page I wonder
// Out of ideas
});
因此,我需要的是帮助使用正确的AJAX语法将var“toremove”的值传递给“options”。php“然后在”选项中执行某些操作。php”,使用“toremove”的值。
希望这有意义!
EDIT No.1:
好的,在使用你们提供的不同设置后,我有一个(半)功能脚本:
function ndw_js_init(){
wp_register_script( \'ndw_js\', plugin_dir_url( __FILE__ ) . \'/ndw_js.js\', array( \'jquery\' ), \'\', true );
wp_enqueue_script( \'ndw_js\' ); // not working without this
wp_localize_script( \'ndw_js\', \'toremove\', array(\'ajaxurl\' => admin_url( \'admin-ajax.php\' )));
}
add_action(\'admin_init\', \'ndw_js_init\');
没有这些设置
nothing 作品在我的外部js文件中,我现在有:
$(\'tr td .widget-remove a\').click(function(){
var toremove = $(this).attr(\'rel\');
$.ajax({
type: \'POST\',
dataType: \'json\',
url: ajaxurl,
data: {
nonce : toremove.nonce,
toremove : toremove
},
complete: function( data ){
alert(toremove + " ding!");
}
});
});
这是可行的,但只适用于jQuery代码。在“我的插件设置”页面的“管理”区域中,使用正确的id号和单词“ding!”,单击会触发警报。
回到我的插件设置页面,我添加了以下内容(感谢@MMK):
function ndw_ajax_function(){
$toremove = $_POST[\'toremove\'];
echo "To remove: " . $toremove;
}
add_action(\'wp_ajax_my_ajax_action\', \'ndw_ajax_function\' );
确实如此
not 工作时,我查看生成的源,但不显示回显行。然而,我不确定在最后的添加操作中
wp_ajax_my_ajax_action
指。
最合适的回答,由SO网友:Kev 整理而成
好吧,我是这样工作的:
Step One: Main Plugin File
function ndw_js_init(){
wp_register_script( \'ndw_js\', plugin_dir_url( __FILE__ ) . \'/ndw_js.js\', array( \'jquery\' ), \'\', true );
wp_enqueue_script( \'ndw_js\' );
wp_localize_script( \'ndw_js\', \'removeid\', array(\'ajaxurl\' => admin_url( \'admin-ajax.php\' )));
}
add_action(\'admin_init\', \'ndw_js_init\');
Step Two: External JS File
$(\'tr td .widget-remove a\').click(function(){
var toremove = $(this).attr(\'rel\');
$.ajax({
url: removeid.ajaxurl,
data:{
\'action\' : \'ndw_ajax_function\',
\'passiton\' : toremove
},
success: function( data ){
$(\'.widget-remove\').html(data);
}
});
});
Step Three: Back in Main Plugin File
function ndw_ajax_function(){
$toremove = $_REQUEST[\'passiton\'];
echo $toremove;
die();
}
add_action(\'wp_ajax_ndw_ajax_function\', \'ndw_ajax_function\' );
add_action( \'wp_ajax_nopriv_ndw_ajax_function\', \'ndw_ajax_function\' );
这很好用。谢谢你的帮助,非常感谢。
SO网友:MMK
我可以建议:
$(\'tr td .widget-remove a\').click(function(){
var toremove = $(this).attr(\'rel\');
// Out of ideas - you shouldn\'t really be for we are here!
$.ajax({
type: \'POST\', // use the method you want
dataType: \'json\',
url: ajaxurl, // this is the url to the admin ajax script
data: {
nonce : your_script_data_object.nonce,
toremove: toremove
},
complete: function( object ){
// do what you want here when the ajax requests completes
}
});
});
现在,在插件的某个地方,你必须有一个函数来拦截你正在发送的数据。您应该确保您正在将ajax拦截函数添加到wordpress中的正确操作挂钩中。以下是您可以做到的方法。
以下是非oop方式。
add_action(\'wp_ajax_my_ajax_action\', \'my_ajax_function\' );
这里是oop方式。
add_action(\'wp_ajax_my_ajax_action\', array( $this, \'my_ajax_function\' ) );
功能如下:
function my_ajax_function(){
// do what you want here - the world is open to you
$toremove = $_POST[\'toremove\'];
// Any other thing you want to do
wp_send_json_success( array( \'AnyDataYouWantToSend\' => $your_data ) );
}
如果您在
my_ajax_function
然后使用
wp_send_json_error
代替
wp_send_json_success
.
我还注意到一件不同寻常的事情。为什么要使用wp_register_script
和wp_enqueue_script
在同一脚本上。这里有一些你可以做的事情。删除wp_register_script
行并使函数如下所示:
function ndw_js_init(){
wp_register_script( \'ndw_js\', plugin_dir_url( __FILE__ ) . \'/ndw_js.js\', array( \'jquery\' ), \'\', true );
wp_enqueue_script( \'ndw_js\' );
wp_localize_script( \'ndw_js\', \'toremove\' );
}
add_action(\'admin_init\', \'ndw_js_init\');
你不需要
$scriptdata
正如我告诉你的,你使用的变量
ajaxurl
javascript变量已经允许您访问管理ajax url。这是只有当你是在管理。在前端,确保
$scriptdata
var作为的参数存在
wp_localize_script
您也不需要这一行:
wp_enqueue_script(\'jquery\');
这是因为您已经告诉Wordpress您的脚本需要
jquery
在dependencies数组参数中
array( \'jquery\' )
.
希望这有帮助。