即使使用 wp_die(),Wordpress admin-ajax.php 也会返回 0

时间:2021-06-13 11:23:59

标签: php jquery ajax wordpress

我正在尝试使用简单的 ajax 调用过滤我的帖子,但无法使其正常工作,因为我的 admin-ajax.php 调用始终返回 0。 这个问题有很多问题,但它们大多通过添加 wp_die() 来解决, 这不能解决我的问题。

Ajax 调用:

$.ajax({
  type: 'POST',
  url: '/wp-admin/admin-ajax.php',
  dataType: 'html',
  data: {
    action: 'filter_projects',
  },
  success: function(res) {
    $('.project-tiles').html(res);
    console.log(res);
} 
})

PHP 函数:

function filter_projects() {
  echo "<p>test</p>";
  wp_die();
}
add_action('wp_ajax_filter_projects', 'filter_projects');
add_action('wp_ajax_nopriv_filter_projects', 'filter_projects');

PHP 函数已正确注册,因为我得到了 200,但它总是返回 0 和“成功”。

我已经尝试过的:

  • WP_DEBUG=1 --> 没有错误
  • 检查开发控制台 --> 没有错误
  • 检查网络 --> admin-ajax.php 调用为 200,但收到“0”
  • 尝试 die() 并退出而不是 wp_die()

我不知道如何进一步调试它,因为它没有返回任何错误。

有人有想法吗?

1 个答案:

答案 0 :(得分:-1)

不要直接回显您的 HTML,而是尝试使用 JSON 处理结果,以便您可以获得更好的结果来评估您的测试。 我将如何进行您发布的相同测试(使用直接 JS 而不是 JQUERY):

{.tabset .tabset-dropdown}

PHP 代码:

                  let xhr = new XMLHttpRequest();
                   
                  xhr.open('POST', "/wp-admin/admin-ajax.php", true);

                  xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

                  var params = 'action=filter_projects';
                  
                  xhr.onreadystatechange = () => {

                    if(xhr.readyState == 4) {

                      // RETURN OK
                      if(xhr.status == 200) {

                         console.log(xhr.responseText); // TEXT RESPONSE
                         console.log(JSON.parse(xhr.responseText));  // JSON RESPONSE
                         
                      // HTTP ERROR 
                      }else{
                        
                        console.log("SOME ERROR HTTP");
                        console.log(xhr.responseText);

                      }

                    }
                }; 

                xhr.send(params);