使用$ .ajax将数据传递给PHP会使$ _POST为空

时间:2016-08-31 03:31:19

标签: php jquery ajax wordpress

所以我正在创建一个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的写函数执行此操作

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

现在我尝试的第一件事就是将功能包含在Wordpress的functions.php中。我一般都不太了解Wordpress或Web开发,但看起来很直观,因为可能php文件在js之前执行(因此它如何获取数据?)

为了解决此问题,我使用create-style.phpwp_schedule_single_event重写为cron,以便在有人访问该网站时触发,但稍有延迟:

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错误

感谢您阅读这篇很长的帖子。一直在寻找互联网寻求解决方案,并决定最好只是问。我非常感谢任何想法。

1 个答案:

答案 0 :(得分:-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");
                  },
    });
}
});