【问题标题】:JavaScript to PHP form, based on user inputJavaScript 到 PHP 表单,基于用户输入
【发布时间】:2017-03-09 10:23:10
【问题描述】:

我的主页上有一个简单的表单 (index.php),它需要一个用户输入。

<form action="/run.php" method="POST" target="_blank"
    <input type="text" name="userinput">
    <button type="submit">Run!</button>
</form>

然后将该输入传递给 run.php,在此显示内容并将其插入 MySQL 数据库。

但是,我需要在该用户输入上运行 JavaScript 函数,然后将结果(来自 JavaScript 函数)输入到数据库中(因此将值从 JavaScript 传递到 PHP)。

我最初在 run.php 中有 JavaScript,用于计算和显示值,但我无法将值传递给 PHP 以插入数据库。

根据我的阅读,您不能在同一页面上将 JavaScript 值传递给 PHP,因为它需要某种 POSTGET,所以我试图在主页 index.php 然后使用隐藏的输入字段将值 POST 到 run.php 文件。

<input id='hidden_input' type='hidden' name='final-calc' value='random(userinput)' />

函数是 JavaScript Promise:

function random(userinput) {
    ....
    .then(function(userinput) { // Function needs to use the userinput from the form
         // calculations
         return X //(X being any random value)
    }
}

我遇到的两个问题是:

  1. 我只能在用户输入值并提交表单后才能获得userinput 值,所以我不相信我可以将userinput 值传递给JavaScript 函数并仍然POST 返回的值?

  2. JavaScript 函数是一个异步 Promise,但显然,这可能没有效果 - 所以它可能不是问题。

【问题讨论】:

  • 据我了解,您想在 PHP 脚本中发布一些变量,然后使用 JS 对这些变量进行操作。如果是这样,你为什么不在第一阶段用 JS 进行计算,然后将结果 POST 到 PHP?
  • @Arkoudinos 你为什么不用JS在第一阶段进行计算,然后将结果发布到PHP?这就是我想要做的。但是,JS 函数需要userinput 进行计算。所以我不知道如何获取userinput 然后发布结果。
  • @KausharAlam 感谢您的资源。如何确保 JavaScript 仅在表单提交后运行?因为函数需要用户输入值来进行计算。

标签: javascript php database forms input


【解决方案1】:

这里的关键是 AJAX。您必须使用纯 JS 检索用户输入,进行所需的任何计算,然后将结果发送到您的 PHP 脚本。我留下了一个小提琴:https://jsfiddle.net/k5xd54eu/1/

<input type="text" id="userinput" name="userinput"/>
<button onclick="inputhandler();">TEST</button>

<script>
function inputhandler() {
  var text = document.getElementById('userinput').value;
  alert(text);

  /*DRAGONS BE HERE*/
  /*THEN*/
  /*USE AJAX HERE TO PASS THE RESULTS TO PHP SCRIPT*/
}
</script>

我不是在解释如何实现 AJAX 调用来发送结果,主要是因为这也是个人喜好问题。例如,您可以使用纯 JS 或诸如 jQuery 之类的库(这是我个人的偏好,因为它非常干净和简单)。看这里:

http://api.jquery.com/jquery.ajax/

这里:

https://www.w3schools.com/jquery/jquery_ajax_intro.asp

了解更多信息。

编辑: 因为我已经提到了 AJAX,所以包含一些代码会更正确。所以这就是我通常用于简单 POST 的方法(它基于 jQuery 库,所以要小心包含它):

var url = 'ajaxhandler.php';
var stuff = '1234abcd';

$.ajax({
        type: "POST",
        url: url,
        data: {stuff: stuff},
        success: function (data) {
           /*Do things on successful POST*/
        }
        });

【讨论】:

  • 感谢您的建议。但是我面临一个问题。脚本运行,所以如果我将alert("success"); 放入ajax 脚本的success 部分,那么在提交表单时会显示一个警报,但是,我似乎无法在 run 上使用该数据.php 文件,即使我尝试像&lt;?php if($_POST["ajaxdata"]) {echo $_POST["ajaxdata"]; } ?&gt; 这样简单的东西(其中data: { ajaxdata: XYZ }
  • 在 Chrome 上,按 F12 打开开发工具。然后单击网络选项卡,然后再次单击下面的 XHR 选项卡。在那里,您将在您发布的变量中找到您的 AJAX 请求。看看,它可能真的很有帮助。
  • 网络选项卡中没有跳出特别有趣的内容。但是,一个有趣的问题(?)是,如果我使用您在上面编写的 AJAX 代码并添加 alert(stuff)(即使我将变量名称更改为不同),那么警报会显示 run.php 页面的整个源代码.
  • 我正在更新我提供给您的代码。我可以 100% 确认这个工作完美无缺。在 XHR 选项卡上单击您的请求,然后检查您从服务器获得的响应(也就是您的 PHP 脚本)。
  • 不幸的是,这仍然对我不起作用。即使我添加了您所写的内容(只需将 url 更改为 run.php 然后在我的 run.php 文件中添加 &lt;?php echo $_POST['stuff']; ?&gt; ,也不会显示任何内容。
猜你喜欢
  • 2013-08-02
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-26
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多