【问题标题】:How can data be submitted to server without triggering a page refresh?如何在不触发页面刷新的情况下将数据提交到服务器?
【发布时间】:2019-09-14 16:28:16
【问题描述】:

我有两个表单元素;一个 SELECT 下拉列表,用作 javascript 函数的输入,以及一个 TEXTAREA,它也是同一个 javascript 函数的输入。 textarea 输入需要或多或少与本地 javascript 的使用同时提交给服务器上的 PHP。理想情况下,javascript 函数和 $_POST 提交到服务器都将由同一个按钮单击触发,但我无法让它工作,因为使用 javascript 函数输入的 textarea 会阻止它被提交到服务器,反之亦然(这两个操作都需要相同的数据,显然会造成干扰。我通过在输入按钮上使用 onmouseout 属性触发 DOM submit() 到服务器,成功解决了这个问题。

我现在遇到的问题是,当 textarea 输入提交到服务器时,页面刷新会擦除输入值。我不希望这种情况发生:我希望下拉列表中的选择保持选中状态,并且输入到 textarea 的文本在提交后保留在 textarea 中。我已经尝试过使用 FORM 标记内部和外部的元素 - 页面会刷新,以任何方式擦除值。 StackExchange 上发布了许多类似的问题和建议的解决方案,但是在花了很多时间尝试其中的许多问题之后,我还没有找到适合我的解决方案。基本上,它们分为几类:阻止提交的类别,例如 preventDefault 并返回 false,以及不阻止刷新或根本不工作的类别,例如各种 javascript/jquery 提交方法。对我来说,这样的提交方法引出了一个问题,即服务器如何知道用于发送提交的方法(除了它是 GET 还是 POST)?无论用于发送它的方法如何,服务器上的 php 代码都不会收到相同的 $_POST 数组吗?它如何知道 html 表单提交、DOM 提交或 javascript/jquery 提交之间的区别?它们都会触发相同的页面刷新作为响应,这并不奇怪。

似乎肯定应该有一些简单的方法来在提交后保留表单值,因为肯定有很多次想要这样做。

附:我不是 jquery 的粉丝,我发现在创建 jquery 之前,ajax 要容易得多。也就是说,在这一点上,我将不胜感激任何有效的东西。我对 jquery 几乎不熟悉,所以对于任何使用 jquery 的响应,请举例说明在我的情况下将如何实现它(它将放置在哪里以及如何触发它)。

PreventDefault,return false,各种javascript和jquery提交,去掉FORM标签,将返回发送到隐藏的iframe

<select id="thisselection" class="sameline"><option selected>Select      this</option></select>

<script>
function sendTextarea() {
  document.getElementById("pform").submit();
}
</script>

<form action="" name="pform" id="pform" method="post">
<textarea id="text" class="sendbox" name="text" cols="45"    rows="10">Hello world</textarea>
</form>

<input  type="button" value="Send" id="pform"    onclick="myFunction.speak($('#text').val(),$('#thisselection').val());"   onmouseout= "sendTextarea();"

/>

一切正常,但我还没有找到一种在不触发页面刷新的情况下将 textarea 输入发送到服务器的方法。

【问题讨论】:

  • 您所需要的只是对语言有一点了解和对异步和同步 javascript 有一点了解。这是一个好的开始:(stackoverflow.com/questions/748175/…)
  • 你认为你可以总结一下你的问题吗?真的很难阅读描述。你可以写一个简短的描述,让你的代码来说话。
  • 你需要学习ajax它会帮助你做到这一点
  • 简单总结——如何在不触发页面刷新的情况下向服务器提交文本区域?以前用过不少AJAX,但是离开这个领域好几年了,忘记了很多,而且还是jquery之前的。我使用当前的 ajax 实现(例如 jquery 实现 $.ajax 或 $.post 来解决此问题)没有任何成功。
  • 您需要使用ajax调用来发布数据而不触发页面刷新

标签: javascript php


【解决方案1】:

我希望我可以简单地阻止页面刷新,但缺乏这样做的方法,可以在提交后保存和恢复表单值(正如 ADyson 所建议的那样。html5 中有一些东西称为 localStorage 或 sessionStorage,并且有现成的脚本使其易于使用,包括 savy.js 和 formsaver.js 其中有几个在https://www.jqueryscript.net/tags.php?/localStorage/ savy.js 适用于我的目的

【讨论】:

    猜你喜欢
    • 2020-08-20
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2013-04-08
    • 1970-01-01
    • 2020-03-18
    相关资源
    最近更新 更多