【问题标题】:Get variables from a POST Method without HTML form从没有 HTML 表单的 POST 方法中获取变量
【发布时间】:2018-02-25 13:24:47
【问题描述】:

我想将 javascript 变量(不带表单)传递给 php,因此 php 可以将它们写入服务器端的文本文件中。为此,我使用了这条 jQuery 行:

$.post( "http://localhost/main.php", data);

这里是php:

$data = $_POST['data'];
echo $data;

$file = "test.txt"
$handle = fopen($file, 'w');
fwrite($handle, $data);
fclose($handle);

当我尝试访问 php 中的信息时,我认为问题可能出在“数据”标签上,但我不知道应该放什么,因为我发现的所有示例都与 html 表单相关联。

我不太明白的另一件事是:我在单击按钮时完成了整个操作,所以如果我单击按钮,它会发布到 php,但实际上会运行上面的 php代码,并写入文本文件还是我遗漏了什么?

*btw,我在 PHP 中使用 WAMP,但我认为这并不重要。

【问题讨论】:

  • data 对象长什么样?
  • 你为什么不使用 Ajax?
  • @SatishGupta 他们正在使用AJAX ...
  • var data = { 小时:0,分钟:0,秒:0,十分之一:0 };但在我通过它之前它会增加。 on var_dump($_POST) 返回:array (size=0) empty
  • 你应该阅读$_POST('hours')等...

标签: javascript php


【解决方案1】:

Semi-Copying my answer from here

PHP 有点有趣,因为当涉及 Ajax 时,它不像其他表单那样从 $_POST 中提取。您实际上需要从 php://input

读取输入

这是一个小例子

$data = file_get_contents("php://input");
$response = json_decode($data, true ); // True converts to array; blank converts to object

$emailAddr = $response["hour"];

希望你能成功申请。

在调试时,我强烈建议使用带有“网络”标签的 Chrome 开发者模式。在底部附近找到您的 ajax 调用,您可以查看确切的标头信息。

【讨论】:

  • 感谢您的回答。当我发送 POST 请求时,我可以在客户端解决这个问题:服务器上节省的时间!{"hours":"00","mins":"00","secs":"01","十分”:“2”}。然后 PHP 获取请求,正如我在标题中看到的那样,它还有 200 个状态代码。然后我尝试 var-dump 它,它说: C:\wamp64\www\phpsandbox\timePlusPlus\main.php:4:string '' (length=0)。代码如下所示: $data = file_get_contents("php://input"); var_dump($data);你有什么想法,为什么会这样?请注意,在客户端它说 POST,但在服务器上它说它是 GET。
  • @hotigeftas 如果 Php 将其读取为空,则可能请求未正确通过,我会在您提交此内容时查看网络选项卡并查看标头的外观,并确保数据对象正常通过。
【解决方案2】:

发布数据以键/值对形式提交。对于您的有效负载:

hours => 0, mins => 0, secs => 0, tenths => 0

在 POST 请求之后,PHP 在 $_POST 关联数组中拥有这些数据。 例如,要访问hours,你可以写$hours = $_POST["hours"]。 如果你想将数据写入文本文件,你现在需要告诉 PHP 文件应该是什么样子:

<?php
$hours = $_POST["hours"],
$mins = $_POST["mins"]
.
.
.

$fileDataToWrite = "Hours: ".$hours." Minutes: ".$mins // and so on

这个变量现在可以作为第二个参数传递给 fwrite 函数:

$file = "test.txt"
$handle = fopen($file, 'w');
fwrite($handle, $fileDataToWrite);
fclose($handle);

生成的文件将如下所示:

Hours: 0 Minutes: 0

您可以选择文件的外观,或者如果您希望文件采用 JSON 格式,只需更改构建 $fileDataToWrite 变量的方式即可。

在您的 JS 代码中,您应该为 PHP 在服务器端运行时添加一个回调:

$.post("http://localhost/main.php", data, 
    response => console.log("Time saved on the server!"));

【讨论】:

  • php 页面不断向这一行抛出“unidentified index: hours”:$hours = $_POST["hours"];以及其他人。你猜到为什么会这样吗?
  • 您可以尝试实施@JohnPavek 的答案吗?
猜你喜欢
  • 2010-10-31
  • 2016-02-17
  • 2022-01-16
  • 2019-04-25
  • 1970-01-01
  • 2013-09-16
  • 2021-08-31
  • 1970-01-01
  • 2019-06-20
相关资源
最近更新 更多