Javascript WordPress前端AJAX调用垃圾站失败
我的用户能够从他们的帐户创建自定义帖子的实例,然后我希望他们也能够删除它们。在他们帐户的某个部分中,列出了他们发布的所有帖子,每个帖子都有一个“删除”按钮,如下所示:Javascript WordPress前端AJAX调用垃圾站失败,javascript,php,ajax,wordpress,Javascript,Php,Ajax,Wordpress,我的用户能够从他们的帐户创建自定义帖子的实例,然后我希望他们也能够删除它们。在他们帐户的某个部分中,列出了他们发布的所有帖子,每个帖子都有一个“删除”按钮,如下所示: 然后在外部JS文件中,我有: jQuery(".deleteMR").click(function (e) { e.preventDefault(); rid = $(this).attr("data-id"); var data = { action: 'delete_request',
然后在外部JS文件中,我有:
jQuery(".deleteMR").click(function (e) {
e.preventDefault();
rid = $(this).attr("data-id");
var data = {
action: 'delete_request',
requestid: rid,
}
jQuery.post(my_ajax_object.ajaxurl, data, function(response) {
if(response.success) {
alert('It worked');
} else {
alert('It failed');
}
});
});
然后在my functions.php中,我有:
add_action('wp_ajax_delete_request', 'delete_request');
function delete_request() {
$requestid = $_REQUEST['requestid'];
wp_trash_post(requestid);
wp_send_json_success(true);
wp_send_json_error(console.log(response));
}
当点击按钮时,JavaScript会正确触发(我已经用console.log检查了它是否拾取了正确的帖子ID),functions.php中的函数至少会被确认,但返回总是“失败”,帖子不会被破坏。如果我输出$response
,我似乎只得到了整个事件触发页面的前10%的代码
我不知道我做错了什么,有人能帮忙吗?谢谢。您的代码有几处错误。请参阅我在下面代码中添加的注释
add_action('wp_ajax_delete_request', 'delete_request');
function delete_request() {
$requestid = $_REQUEST['requestid'];
// missing $ from variable name
wp_trash_post(requestid);
// always returns a success response
wp_send_json_success(true);
// error response never gets returned as success response is sent first.
// also console.log is javascript, use var_dump or print_r instead
wp_send_json_error(console.log(response));
}
如果你像这样写你自己的代码,我认为后垃圾处理应该是有效的
add_action('wp_ajax_delete_request', 'delete_request');
function delete_request() {
// check nonce wp_verify_nonce()
// send nonce with your ajax request
// get nonce from wp_create_nonce() added to your site with wp_localize_script()
// check capabilities with current_user_can();
if ( ! empty( $_POST['requestid'] ) && is_numeric( $_POST['requestid'] ) ) {
$trashed = wp_trash_post( intval( $_POST['requestid'] ) );
if ( $trashed ) {
wp_send_json_success('Trashing post succeeded');
} else {
wp_send_json_error('Trashing post failed');
}
} else {
wp_send_json_error('Post id missing');
}
}
FWIW这个问题通过我将特定于ajax的JS移动到它自己的文件中,然后在它自己的函数中将其排队,而不是将所有其他JS文件排队的函数来解决。无法告诉您它是如何修复的,但它确实修复了。谢谢!我可以看到一些noob的错误,所以感谢你指出它们,你所有其他的建议都是有意义的-但是我尝试了它们,它似乎不起作用。在我的JavaScript中,我现在只输出
警报(响应)
警报的内容仍然是我调用所有这些内容的页面的顶部(doctype声明到title标记)。@Zeb这很奇怪,我在本地沙盒WP安装中测试了代码(您的链接、jquery和我的ajax函数),它按预期工作。在config.php
中是否将WP\u DEBUG
和WP\u DEBUG\u LOG
设置为true?错误日志中是否有错误?当ajax post请求被触发时,浏览器的网络选项卡会显示什么作为响应?请求后控制台中是否有任何错误?我只是启用了调试和日志,并再次运行了该函数,但没有生成文件。至于“网络”选项卡,当我单击该按钮时,它会为“我的媒体请求/”创建一个新条目(该url是从中调用的),但没有错误。真的很难理解:/@Zeb所以ajax请求被发送到“my media requests/”而不是admin-ajax.php?如何设置my_ajax_object.ajaxurl
?看起来是这样的。当我将文件排队时,我在那里设置我的\u ajax\u对象
。像这样:函数样式和脚本(){
。wp\u队列脚本('ajax脚本',获取模板目录uri()。/js/sitewide.js',数组('jquery'),1.1,true);wp\u本地化脚本('ajax脚本','myajax\u对象',数组('ajax\u url'=>admin\u url('ajax.php'));
。添加操作(“wp_排队_脚本”、“样式_和_脚本”);