在jquery脚本中,我有;
jQuery.ajax(
ajaxurl, {
action: \'lu_ajax\',
status: \'enabled\'
},
success: function (a) {
alert(a)
}
在我的文件中。php我有;
add_action(\'wp_ajax_lu_ajax\', \'lu_ajax\');
add_action(\'wp_ajax_nopriv_lu_ajax\', \'lu_ajax\'); //for logged users
function lu_ajax() {
if($_GET[\'status\'] != \'\') {
$value = $_GET[\'status\'];
echo $value;
setcookie("status", $value, time()+3600, "/");
}
}
我正在包括文件。主插件中的php,如require\\u once(\'inc/file.php\');
但是,没有设置cookie或任何值被回显,请任何人告诉我问题是什么。起初,我遇到的问题是,我直接调用文件,导致wp函数未定义,因此建议我使用ajaxurl,然后使用要执行的操作和要发送给php的变量,但现在什么都没有发生。
另外,jquery和php都在同一个文件中。php我没有单独的js文件,因为它不符合我的目的。
update new issue当我从jquery发出ajax调用时,我会根据条件启动它们,下面是一个示例;
var stat= true;
jQuery.ajax({
type: \'POST\',
url: ajaxurl,
data: {action: \'lu_ajax\', status: \'enabled\'},
success: function (a) {
alert(a)
}
});
} else {
var stat= false;
jQuery.ajax({
type: \'POST\',
url: ajaxurl,
data: {action: \'lu_ajax\', status: \'false\'},
success: function (b) {
alert(b)
}
});
}
然而,cookie总是设置为enabled,这意味着只进行了第一次调用,当我手动将其设置为false进行测试时,问题不在这种情况下。
最合适的回答,由SO网友:gmazzap 整理而成
首先,你的js是错误的,你把jQuery.post()
和的jQuery.ajax()
您应该使用
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: { action: "lu_ajax", status: "enabled" },
success: function( data ) {
alert(data);
}
});
或
jQuery.post(
ajaxurl,
{ action: "lu_ajax", status: "enabled" },
function(data) {
alert(data);
}
);
在那之后
the ajaxurl
js variable is available only in admin pages, not in frontend.
所以上面的代码只能在管理页面中使用,但一旦使用add_action(\'wp_ajax_nopriv_lu_ajax\', \'lu_ajax\');
我认为您希望在前端使用ajax,在这种情况下,您必须通过wp_localize_script
.
因此,如果上面驻留js代码的js脚本命名为“my\\u ajax”。并驻留在插件的“js”子文件夹中,执行以下操作
add_action(\'wp_enqueue_scripts\', function() {
wp_enqueue_script(\'my-ajax\', plugins_url(\'js/my_ajax.js\', __FILE__) );
wp_localize_script(
\'my-ajax\',
\'myAjaxData\',
array( \'ajaxurl\' => admin_url(\'admin-ajax.php\') )
);
});
现在,替换上面js代码中的
ajaxurl
具有
myAjaxData.ajaxurl
SO网友:david.binda
ajaxurl仅在admin中设置。如果这是一个前端ajax(由于nopriv,看起来像是这样),则必须在排队时本地化脚本:
add_action( \'wp_enqueue_scripts\', \'my_enqueue\' );
function my_enqueue($hook) {
wp_enqueue_script( \'ajax-script\', plugins_url( \'/js/my_query.js\', __FILE__ ), array(\'jquery\'));
// in javascript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
wp_localize_script( \'ajax-script\', \'ajax_object\',
array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ), \'we_value\' => 1234 ) );
}
在JS文件中,您可以访问ajax\\u url作为ajax\\u对象的变量:
jQuery.ajax(
ajax_object.ajax_url, {
action: \'lu_ajax\',
status: \'enabled\'
},
success: function (a) {
alert(a)
}
请参见
http://codex.wordpress.org/AJAX_in_Plugins