【问题标题】:Wordpress plugin development - AJAX JSON data is sending correctly but PHP response is always 0, why?Wordpress 插件开发 - AJAX JSON 数据发送正确但 PHP 响应始终为 0,为什么?
【发布时间】:2023-03-17 15:23:01
【问题描述】:

我必须在这里遗漏一些简单的东西。 Firebug 显示在 NET 选项卡(NET 选项卡-> 发布 -> 参数)中完全按照应有的方式发送数据。 PHP 函数甚至不会回显简单的文本。

PHP:

add_action('wp_ajax_nopriv_process_json', 'process_json_received');
add_action('wp_ajax_process_json', 'process_json_received');

function process_json_received(){
echo "ANYTHING...";
exit;
}

JS/Jquery(正确发送)

var data =  JSON.stringify({ action: 'process_json', value_name: 'value'  });//generic sample

$.ajax({ url: 'http://localhost:12345/site_name/wp-admin/admin-ajax.php', 
               data: {data: data},
               type: 'post',
               dataType: 'json',
               success: function (response) {
               alert("Got this from the server: " + response);
               console.log( response );
               $('body').append(response); // <-- Append the ajax response to the page body
            },
            complete: function(XMLHttpRequest, text_status) {

                  },
                error: function (response) {
                    alert("Error getting php file");
            }
});

同样,PHP 函数中的内容无关紧要,响应始终为 0。它可能是“enqueue_scripts”的事情,但 ajax 请求正在按应有的方式发送。 Firebug 中的 NET 选项卡显示完美的 json 数据,因此问题必须与 PHP 函数(或正确访问它)有关。也许 Wordpress 以某种方式阻止了它???必须是一些简单的东西——我希望新的眼睛会有所帮助。提前谢谢...

【问题讨论】:

  • 您是否在错误函数或“成功”Console.log 中收到警报以显示零?如果您进入成功状态,那么 PHP 中肯定有错误。

标签: php jquery ajax json wordpress


【解决方案1】:

因为ANYTHING... 不是正确的 json 格式。试试echo json_encode(array('msg' =&gt; 'test'));这会导致JQuery有解析错误(不是接收错误)

【讨论】:

  • 我刚刚放在这里的任何部分实际上并不在代码中。只是作为一个例子,没有任何回应。试过你的方法,不行。响应仍然是 0 - 还是谢谢
  • 他没有得到 javascript 解析错误,而是响应为 0,这是 wordpress 在 ajax 调用没有得到正确输入时的默认值。
  • Firebug 显示通过 NET -> Post -> 参数正确发送的数据,所以我认为问题不在于 AJAX 调用。更有可能是 PHP 或 Wordpress 所期望的缺少的东西。
  • 你试过我的解决方案了吗?查看 Wordpress 文档了解更多信息。
  • @Sumit Gupta - 如果 ajax 调用有问题,Firebug 会显示以 JSON 格式发送的正确数据(NET tab-> Post -> Parameters)吗?我不这么认为,但我可能是错的。我完全有可能在排除错误的问题。 Wordpress 可能对我未包含的前端 AJAX 调用还有哪些其他期待?这个问题让我在开发中陷入了僵局,通过 AJAX 保存数据库对于这个项目是绝对必要的。 -感谢您的意见
【解决方案2】:

从 javascript 中更改行

var data =  JSON.stringify({ action: 'process_json', value_name: 'value'  });//generic sample

var data =  { action: 'process_json', value_name: 'value'  };

Wordpress 需要 POST 数据,因此它可以读取 $_POST['action],您永远不应该对其进行字符串化,而只能使用核心 javascript 对象。

了解更多信息:http://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_%28action%29

编辑:

还将data: {data: data}, 更改为data: data,

:) 上次我很怀念。

【讨论】:

  • 当我不进行字符串化时,Firebug 会显示这样的数据(名称:值)对:data[action] process_json data[value_name] value 仍然返回 0
  • 还将“data: {data: data}”改为“data: data,”
  • 当我更改它时,我收到错误响应“获取 php 文件时出错”。这会产生 AJAX 调用问题,而不是 php 方面的问题。 :(
  • 不确定您的意思。无论 PHP 函数是什么,它都返回 0。使用 echo 或 return。基本上它正在寻找 PHP 函数,但由于某种原因没有执行它
  • 好吧使用提琴手或在这里看到下一个答案,我的意思。
【解决方案3】:

好的,我用下面的代码搞定了:

在主 PHP 插件文件中:

echo "<script src='URL PATH TO/ajax_file.js' type='text/javascript'></script>";

add_action( 'wp_ajax_foobar', 'foobar_handler' );
add_action( 'wp_ajax_nopriv_foobar', 'foobar_handler' );
function foobar_handler() {
    // Handle request then generate response
    echo "ANYTHING..."; // do stuff here
    die(); // avoids extra 0 at the end of the response
}

在 ajax_file.js 中:(在上面的 script 标签中引用)

jQuery(document).ready(function($) {

   $('#id_to_submit_button').click( function() {
      var data = {
         action : 'foobar',
         Whatever : '1234',
      }
      ;
      // ajaxurl only needed for front - facing public pages, comment out for back end pages
      var ajaxurl = 'http://SITE_URL/wp-admin/admin-ajax.php';
      jQuery.post(ajaxurl, data, function(response) {
         alert('Got this from the server: ' + response);
      }
      );
   }
   );
}
);

只要我以这种方式包含脚本,它就可以工作,但它不会像许多消息来源所暗示的那样放在 PHP 函数中。我尝试了很多其他应该有效的方法。我在 Wordpress codex 页面(很多次)和其他几个教程上一步一步地进行。将脚本入队、注册脚本,遵循所有推荐的做法。我仍然不明白为什么这种方式对我有用,而所有其他“正确”的方式都没有。可能是我的本地服务器环境中的某些东西。非常感谢那些回答并试图提供帮助的人。上帝知道我在 StackOverflow 上得到了足够多的快速答案,我希望这可以节省我花费大量时间进行测试和故障排除的时间......

【讨论】:

    猜你喜欢
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2021-06-24
    • 1970-01-01
    • 2015-05-12
    • 2018-03-27
    • 2018-03-03
    相关资源
    最近更新 更多