Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript WordPress前端AJAX调用垃圾站失败_Javascript_Php_Ajax_Wordpress - Fatal编程技术网

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_排队_脚本”、“样式_和_脚本”);