ajax回调显示功能关闭太快

时间:2016-02-08 18:42:46

标签: javascript jquery ajax twitter-bootstrap

我在ajax回调中有一个函数,它在里面显示一个带有bootstrap警报的div。问题是它只能在它消失之前停留大约半秒钟。我想留下2秒钟。 Async设置为false,因为我需要表单输入以使用更新的值重新加载自己,如果设置为true,我必须使用F5手动刷新页面以查看更新的版本。

功能

$('#btnEnregistrerMembre').on('click', function (e) {
    $.ajax({
        async: false, type: 'POST', url: 'functionPHP.php', data: {
            userID: document.getElementById('id').value, nomUtilisateur: document.getElementById('nomUtilisateur').value, estActif: +document.getElementById('actif').checked, estAdmin: +document.getElementById('admin').checked, updateMembre: 'updateMembre'
        },
        success: function (msg) {
            ajouterMessage('messageArea', 'succes', 'Les modifications ont étés prises en compte.');
            // alert('succes ajax');
        },
        error: function (err) {
            ajouterMessage('messageArea', 'danger', 'Les modifications ont échouées.');
        }
    });
});

AjouterMessage

function ajouterMessage(locationID, type, message) {
    var endroit = document.getElementById(locationID);

    var element = document.createElement('div');
    if (type == 'danger')
    {
        element.className = 'alert alert-danger';
        element.innerHTML = '<strong>Erreur!</strong>' + ' ' + message;
    }
    else
    {
        element.className = 'alert alert-succes';
        element.innerHTML = '<strong>Succès!</strong>' + ' ' + message;
    }
    endroit.appendChild(element);
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您的问题是async设置为false。我知道您希望页面重新加载效果,但您尝试在重新加载之前在页面中设置一个值。

发生了什么:

  1. 您同步发送请求
  2. 收到服务器的回复
  3. 您处理响应消息并显示相应的消息
  4. Web浏览器还处理来自服务器的响应(记住,它是同步的!)
  5. 页面重新加载,因为请求是同步的而非异步且您的消息丢失
  6. 这里有几个选项......

    选项1(推荐): 您可以异步发送请求,并返回响应中需要刷新的相关数据。

    选项2: 设置带有标志的cookie,以指示在刷新页面时应设置的消息。记得在阅读后清除旗帜。

    Si c'est plus facile pour toi,je peux traduiremareéponseenfrançais。

    编辑:应该注意的是,同步AJAX完全没用。它代表异步Javascript和XML。如果您想发送同步请求,简单的表单提交或带有一些GET参数的链接可能会更加简单。

答案 1 :(得分:0)

谢谢你这个非常明确的答案。但是,我在更新数据库的函数中有一个返回值,但是如何在modifierUtilisapeur.php页面中获取值?以下是该函数的一些代码,如果它可以提供帮助:

更新

function updateMembre($id,$nomUtilisateur,$status,$admin){
$caught = false;
$connexion = Connexion(NOM, PASSE, BASE, SERVEUR);

$requete = "update utilisateur set nomUtilisateur = '".addslashes($nomUtilisateur)."', estActif = '".$status."',estAdmin = '".$admin."' where id ='".$id."' ;";


try{
ExecRequete($requete, $connexion);}
catch (Exception $e){
$caught = true;
echo '<div class="alert alert-danger">
  <strong>Erreur!</strong> Le nom d\'utilisateur existe déjà.
</div>';
}
finally{
if (!$caught){
    echo '<div class="alert alert-success">
  <strong>Succès!</strong> Les modifications ont étés prises en compte.
</div>';
    }
}
return getMembre($id);
}

getMembre

function getMembre($nomUtilisateur){
$connexion = Connexion(NOM, PASSE, BASE, SERVEUR);
    $requete = "SELECT * FROM utilisateur where nomUtilisateur = '".$nomUtilisateur."';";

    $resultat = ExecRequete($requete, $connexion);
    $resultat->data_seek(0);
    $row = $resultat->fetch_assoc();
    return $row;
}