javascript - PHP Post 在 POST 中 - 使用 Javascript 提交表单
问题描述
首先,感谢您花时间阅读本文。我遇到了一个独特的情况,我希望有人可以帮助我,或者至少为我指出一个新的方向,因为我已经为此奋斗了一段时间,但无济于事......希望我能解释这是有道理的。
我目前正在对我的 index.php 文件进行 POST(来自我们的系统 - 不是基于 Web 的),并且在该文件中,我正在使用第 3 方供应商 .JS 文件来标记特定值。在页面的末尾,我有一个处理标记化过程的 javascript 函数,然后在它被标记化之后,我正在做一个 javascript 表单提交以将标记化的值发布到 API 页面以处理该过程的第二部分。
我创建了静态输入字段来测试该过程,当我通过“提交”按钮从网页进行处理时,一切正常。但是,当我尝试使用我们系统中的 POST 过程(不是基于 Web)对此进行测试时,它并没有遵循我对 javascript 的预期流程。
此外,我正在执行 javascript“onload”功能,因为目标是一旦 POST 值发布到页面,并且标记化过程完成,它将自动提交表单。
提前感谢您的帮助 - 如果您有任何问题,请告诉我,因为我会密切关注此线程。
示例代码:
<form method="POST" id="APIPOST" action="api.php">
Mode: <input name="mode" value="<?php echo $_POST['mode']; ?>">
Key: <input name="key" id="key" value="<?php echo $key; ?>">
Client Name: <input name="client_name" value="<?php echo $_POST['client_name']; ?>">
</form>
<script>
window.onload=(function(){
//Tokenization code is here
document.getElementById("APIPOST").submit();
});
</script>
解决方案
我猜令牌化代码是异步的,因此在不同的线程上运行。让我试着演示一下。
这是您的 Javascript:
window.onload=(function(){
//Tokenization code is here
document.getElementById("APIPOST").submit();
});
这一行,等到页面加载完毕,然后启动脚本
window.onload=(function(){
这是我的猜测,令牌化代码正在执行某种AJAX调用。这需要一点时间才能运行,但不会阻止其余代码运行。
您可能也有同源政策问题,但我们假设您没有。
//Tokenization code is here
现在,当您的标记化代码在后台运行时,您正在尝试提交表单。这很好,但是您的标记化代码尚未完成其工作,并且标记值尚未返回。
document.getElementById("APIPOST").submit();
如何修复:将以下行移至在令牌化代码中返回令牌值之后,而不是在调用之后:
document.getElementById("APIPOST").submit();
例如:
function getToken() {
// make remote call to get token and
// on valid result, call updateTokenVal()
}
function updateTokenValue(str) {
// do stuff with str value
// then submit the form
document.getElementById("APIPOST").submit();
}
window.onload=(function(){
//Tokenization code is here
getToken();
});
推荐阅读
- javascript - Jest & React & Typescript & React-Testing-Library 错误
- java - 为什么Java溢出返回0作为值
- ios - Appstore Connect Testflight 提供旧版本,即使我上传了新版本
- c# - 如何创建此动画过渡?
- php - 如何从另一个查询结果运行一个查询。(单级传销倒数)
- nlp - IBM NL Classifier 和 NLU 定制模型分类有什么区别?
- c - C 为什么scanf返回错误的输出
- r - 从需要使用 R 登录的站点中抓取信息(可能使用 API)
- oracle - Need output in below format in oracle. I have tried with lag function it worked if we have only 2 rows in table
- haskell - Haskell 和理解列表