在php中为使用ajax发布数据的变量命名


What to name variables in php to post data using ajax?

我很难创建一个简单的表单,即获取用户输入的电子邮件地址并将其存储在服务器端.log文件中。

HTML&index.php:中的JQuery

<div>
  <form id="form" method="post" action="">
    <input name="field1" type="Your Email" id="field1" />
    <input type="submit" value="Sign me up!" id="submitme">
  </form>
</div>
<script>
$("#submitme").click(function(event){
  event.preventDefault();
  var form_data = $("#form").serialize()
  $.ajax({
    type: 'POST',
    data: form_data,
    url: 'action_page.php',
  });
});
</script>

我在action_page.PHP中的PHP:(也就是说,将发布的数据保存到.log中)

<?php
    if (isset($_POST['form_data'])) { 
        $txt=$_POST['form_data']; 
        file_put_contents('test.log',$txt."'n",FILE_APPEND|LOCK_EX);
        exit();
    }
?>

单击提交按钮后,页面只会刷新,不会向我的.log文件中添加任何内容。我觉得这个问题与我在ajax函数和action_page.php中引用数据的方式有关。我已经尝试了在各种stackoverflow帖子中看到的所有不同的方法,但我似乎找不到正确的方法。

提前谢谢。

form_data按此方式运行,field1=value。它将单个<input>name作为POST的密钥,因此您需要在PHP文件中执行以下操作:

<?php
    if (count($_POST) && !empty($_POST['field1'])) {
      $txt = $_POST['field1'];
      file_put_contents('test.log', $txt . "'n", FILE_APPEND | LOCK_EX);
      exit();
    }
?>

此外,我正在检查!empty()而不是isset(),因为它肯定会被设置。同时检查$_POST的计数,将确保这只在POST方法中运行。

更新

注意:您将无法在屏幕中看到输出,但它会写入文件中。您可以通过查看控制台窗口来检查响应

我刚刚看到你刷新了页面。可能是,您忘记包含jQuery库了吗?你需要检查控制台的错误,它应该说:

$ is not a function.

因此,为了解决这个问题,请在<script>标签之前添加jQuery库:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

如果有效,请告诉我。也请检查您的控制台是否存在错误。

您没有传递任何名为form_data的变量。您正在传递:data: form_data,其形式为key=value&key2=value2

一种解决方案是将其传递到一个新对象中:

$.ajax({
    type: 'POST',
    data: {
        form_data: form_data
    },
    url: 'action_page.php',
});