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

时间:2017-04-30 18:48:39

标签: javascript php jquery ajax

我正在进行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(我在每个页面中包含)中,我有一个代码来读取会话[&#39; flash&#39;],显示相关的消息,然后销毁它。在我的页面中,我有一个php条件,它会照看会话[&#39; auth&#39;] - &gt; mission_id并根据它显示内容。

我愿意在php代码完全完成后刷新页面,以便显示会话flash并考虑会话mission_id发生的条件。

问题在于,当我执行我的Ajax代码时,页面会重新加载,但是如果php会话(flash和mission_id)没有准备就绪。我必须手动重新加载以查看更改。

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

我知道PHP有效,因为我可以看到我的数据库发生了PHP的变化。

我试过了:

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

以及其他一些东西。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

在这两个方面......

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

... reload之后的括号立即调用方法。向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)

答案 1 :(得分:1)

$.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()
    }
});

答案 2 :(得分:0)

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

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