首页 > 解决方案 > WordPress 管理中的 AJAX 响应为空,但浏览器响应不为空

问题描述

我在 wp-admin 中添加了一个自定义页面。除其他外,该页面具有以下脚本:

  <script>
    (function ($) {
      $(document).ready(function() {
        $("#mybtn").on("click",function(e) {
          $.ajax({
            'url': '<?=get_home_url()?>/myscript.php',
            'data': {'admin':1},
            'datatype': 'json',
            'type': 'POST',
            'cache': false,
            success:function(data) {
              console.log(data);
            },
            error: function (desc, err) {
              alert("Details: " + JSON.stringify(desc) + "\nError: " + JSON.stringify(err));
            }
          });
        });
      });
    })(jQuery);
  </script>

当在浏览器检查器的网络选项卡中查看时,脚本的响应不为空 - 取决于后台(服务器)中发生的情况,其内容可能会有所不同,但它始终是 JSON,并且永远不会为空。

但是,该console.log(data)位显示为undefined. 我显然做错了什么,但我不知道是什么。有问题的 WP 站点没有缓存插件,通过不同的浏览器和计算机访问 WP 管理,并且总是相同的 - 浏览器看到服务器响应,AJAX 的 console.log 没有。

我也试过用 替换$jQuery但结果是一样的。添加async:true并且async:false什么也没做。

我也用myscript.php这个替换了整个内容:

<?php
    echo json_encode(["error"=>1,"message"=>"Failed to update!","start"=>$start,"end"=>date("Y-m-d H:i:s")],JSON_UNESCAPED_UNICODE);
    die();
?>

并且仍然有相同的结果 - 浏览器的检查员的响应很好,console.log()undefined.

我究竟做错了什么?

标签: jquerywordpress

解决方案


  1. 您指定的“数据类型”选项应该是“数据类型”(我相信区分大小写)

  2. 尝试使用 'contentType' 选项:

    内容类型:“应用程序/json;字符集=utf-8”


推荐阅读