【问题标题】:Passing data using $.ajax to PHP leaves $_POST empty [duplicate]使用 $.ajax 向 PHP 传递数据会使 $_POST 为空 [重复]
【发布时间】:2016-08-31 03:31:18
【问题描述】:

所以我正在制作一个 Wordpress 网站,并希望将数据(由 jQuery 动态创建的 css 样式)发送到 PHP。这样做的原因(与这个问题不完全相关)是将数据写入每个页面开头加载的 .css 文件 - 使其在 js 执行时没有可见的样式“更改”(嗯,仅在第一次加载页面时)。我确信可能有更好的方法来做到这一点。

但回到主要部分(将数据从 jQuery 发送到 .php)。我正在执行一个执行此操作的 js 脚本(在“front-page.php”上):

jQuery(function($){
    $(window).on("load", function() { 
        $.ajax({
            type: "POST",
            url: "create-style.php",
            data: { style : styleString }, 
            dataType: "json",
            success: function () {
                console.log("success");
            }
        });
    });
});

控制台显示“成功”,所以我假设数据正在传递给 create-style.php。

create-style.php 的 write 函数就是这样做的

 $file = 'new-style.css';
 $style = $_POST['style'];
 file_put_contents($file, $style, LOCK_EX);

现在我尝试的第一件事是将该函数包含在 Wordpress 的 functions.php 中。一般来说,我对 Wordpress 或 Web 开发知之甚少,但这似乎很直观,因为 php 文件可能在 js 之前执行(那么它如何获取数据?)

为了解决这个问题,我将create-style.php 重写为一个cron,使用wp_schedule_single_event 在有人访问该站点时触发,但稍有延迟:

add_action('write_style_cron', function(){
    // the above writing function
});

wp_schedule_single_event(time() + 10, 'write_style_cron'); // give it a slight delay to make sure jQuery happens

但是,没有 $_POST 数据被写入文件并且进行任何测试都显示它是空的。我做了很多测试并且知道:

  • cron 功能基本正常工作
    • 写入功能适用于测试值
  • $_POST 显示为完全为空,我在 /wp-cron.php?doing_wp_cron 中收到“未定义索引”错误
  • $.ajax 正在触发 success
  • 没有其他php/js错误

感谢您阅读这篇很长的帖子。整天在互联网上搜索解决方案,并决定最好只是问问。如果有任何想法,我将不胜感激。

【问题讨论】:

  • 你检查styleString 是否传递了一个值?
  • 检查浏览器的 Network 控制台...您看到 POST 请求了吗?如果是,请检查请求数据和响应。响应是否完全为空?
  • 另外,为什么要在文档 ready 处理程序中包装一个窗口 load 事件处理程序?似乎多余
  • @Phil 感谢您提供有关网络控制台的提示。在 create-style.php 的条目中,响应是“致命错误:调用未定义的函数 add_action()`。也许就是这样,嗯?(顺便说一句,我不记得为什么我把它放在窗口加载中)编辑:啊哈也许this 会有所帮助。我猜我对 stackoverflow 的搜索不够。

标签: php jquery ajax wordpress


【解决方案1】:

尝试使用此代码:

jQuery(function(){
$('#yourFormName').on('submit', function (e) { //on submit function
    e.preventDefault();
    $.ajax({
      type: 'post', //method POST
      url: 'create-style.php', //URL of page where to pass values
      data: $('#yourFormName').serialize(), //seriallize is passing all inputs values of form
      success: function(){ 
              console.log("success");
                  },
    });
}
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-04
    • 2022-08-04
    • 2018-06-17
    • 1970-01-01
    • 2012-02-13
    • 2012-09-07
    • 1970-01-01
    • 2013-11-13
    相关资源
    最近更新 更多