【问题标题】:Problems with $.post$.post 的问题
【发布时间】:2019-05-28 09:13:03
【问题描述】:

我正在对我的网站进行一些检查,以确保网络浏览器可以运行它。如果浏览器通过要求,我想重新加载网页并像这样使用 jQuery 发送一个 post 参数。

我在 jQuery 上尝试过 $.post 函数,如下所示:

$.post("index.php", { 
  correcto_obligatorio: true 
});

window.location.reload("index.php")

但是,当浏览器重新加载网页时,$_POST 上没有 correcto_obligatorio 参数。我使用var_dump php 函数来打印它,我得到的只是NULL

【问题讨论】:

  • 那是因为 $.post 是异步的,所以帖子被发送了 - 但你似乎没有用它做任何事情
  • 您似乎对这些东西的工作原理有些困惑。 .reload() 可以有参数,但它是一个布尔值,强制从服务器而不是浏览器缓存重新加载当前页面
  • 您正在使用 AJAX。应该使用 AJAX 的原因是在不重新加载页面的情况下执行异步 http 请求。如果您想执行传统的 POST(重新加载页面),您应该使用 <form>
  • 我们也应该问,虽然在这一点上它有点无关紧要,但index.php 对您在correcto_obligatorio: true 中发送的数据做了什么主要,它如何持久化这些数据跨度>
  • 包含此代码的脚本是称为index.php 还是完全是另一个脚本?询问的原因是window.location.reload("index.php") 不会重定向到index.php .reload() 只会重新加载当前页面,无论是什么

标签: javascript php jquery post


【解决方案1】:

$.post 是一个单独的异步请求。 window.location.reload 只是重新加载一个页面,但不会考虑您的所有异步请求。

如果你打印 $_POST['correcto_obligatorio'] 不是var_dump,而是登录到文件,你会看到那里的值。

有两种解决方案适合您。

1) 等待ajax结果并响应。

$.post( "index.php", { 
  correcto_obligatorio: true 
}, function (data) {
  if (data.passed_validation) {
    window.location.reload("index.php")
  }
});

2) 二是张贴表格

<form action="/index.php" method="POST" id="my_form">
  <input type="hidden" name="correcto_obligatorio" value="1"/>
</form>

<script>
  function myFunc() {
     $("#my_form").submit()
  }
</script>

最常见和最正确的方法是第一种解决方案。

【讨论】:

【解决方案2】:

您的代码不会等待帖子完成。您基本上发送请求并将浏览器重定向到 index.php,而无需等待服务器回答您。考虑使用回调函数:

$.post( "index.php",  { 
  correcto_obligatorio: true
}, function( result) {
    if (result.passed) {
        window.location.reload("index.php")
    }
});

假设服务器响应一个有效的 json 对象,该对象包含传递的参数(内容类型应设置为 application/json )

【讨论】:

    猜你喜欢
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2015-01-15
    • 2018-09-14
    • 2010-10-16
    • 1970-01-01
    相关资源
    最近更新 更多