繁体   English   中英

在PHP Ajax调用结束时刷新当前页面

[英]Refresh current page at the end of PHP Ajax call

我正在一个ajax调用,看起来像这样:

$.ajax({
  type: "POST",
  url: "myPHP.php",
  data: 1,
  success: window.location.reload()
});

和一些与此有关的PHP:

<?php

// PDO CONNECTION

session_start();

$mission_id = $_POST['mission'];

$_SESSION['auth']->mission_id = $mission_id;

if($pdo->prepare('UPDATE client SET mission_id = ? WHERE id = 1;')->execute([$mission_id])) {
    // Creates a session to be read by the header at the page load
    $_SESSION['flash']['success'] = 'Good.';
} else {
    $_SESSION['flash']['danger'] = 'Problem.';
}

?>

在我的header.php(我在每个页面中都包含)中,有一个代码可以读取session ['flash'],显示相关消息,然后销毁它。 在我的页面中,我有一个php条件,该条件照顾session ['auth']-> mission_id并根据它显示内容。

我愿意在php代码完全完成后刷新页面,以便显示会话刷新,并考虑到会话task_id发生的情况。

问题是,当我执行我的Ajax代码时,页面会重新加载,但是就像php会话(flash和mission_id)尚未准备好一样。 我必须手动重新加载才能看到更改。

我尝试使用完全解决方案而不是成功解决方案,甚至尝试使用setTimeout解决方案,但都没有用。

我知道PHP可以工作,因为我可以看到数据库发生的变化是由PHP引起的。

我试过了 :

$.ajax({
  type: "POST",
  url: "myPHP.php",
  data: myDatas,
  success: setTimeout(window.location.reload(), 3000)
});

还有其他一些东西。

谢谢您的帮助。

在这两个方面...

success: window.location.reload()
success: setTimeout(window.location.reload(), 3000)

... reload后的括号会立即调用该方法。 success:提供的是success:setTimeout()是方法的return值,类似于:

var _result = window.location.reload();

$.ajax({
  type: "POST",
  url: "myPHP.php",
  data: 1,
  success: _result
});

为了将调用延迟到事件发生之前,您必须直接提供一个函数对象。 使用reload()类的方法执行此操作的一个选项是将其调用包装在另一个函数中。

success: function () {
    window.location.reload();
}

要么:

function onSuccess() {
    window.location.reload();
}

// ...
success: onSuccess // no calling parenthesis

在某些情况下,直接提供方法也可能有效。

success: window.location.reload

但是,这样做通常会改变this方法的含义,并可能需要事先绑定它。

success: window.location.reload.bind(window.location)
$.ajax({
    type: "POST",
    url: "myPHP.php",
    data: myDatas,
    success: function () {
        setTimeout(window.location.reload(), 3000)
    }
});

要么

$.ajax({
    type: "POST",
    url: "myPHP.php",
    data: myDatas,
    success: function () {
        window.location.reload()
    }
});

data:mydatas! mydatas是您将发送到PHP脚本的数据。 因此您可以像这样指定变量名称和数据:

var name=document.getElementById('name').value;
data:"name="+name+"age="+age

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM