2017-10-04 3 views
-1

On m'a récemment suggéré d'essayer des pulsations cardiaques pour résoudre un problème dans mon projet. Parce que je suis nouveau à javascript, j'essayais de mettre en œuvre la deuxième réponse à this question avant de passer, mais même cela ne semble pas fonctionner, et je ne peux pas comprendre pourquoi. Ce sont les trois fichiers impliqués:L'implémentation de pulsation simple ne fonctionne pas dans MVC

HTML (Heart.cshtml)

<head> 
    <script type="text/javascript" src="~/Scripts/heartBeat.js"></script> 
</head> 

<body> 
    <script type="text/javascript"> 
     LaunchHeartBeat('@Url.Action("KeepSessionAlive", "Auxiliary")'); 
    </script> 
</body> 

Javascript (heartBeat.js)

var isSuccess = false; 
function LaunchHeartBeat(actionUrl) { 
    setInterval(function() { 
     $.ajax({ 
      type: "POST", 
      url: actionUrl, 
      success: function() { isSuccess = true; } 
     }); 
    }, 2000); 
} 

Controller (AuxiliaryController.cs)

[HttpPost] 
public JsonResult KeepSessionAlive() 
{ 
    System.Diagnostics.Debug.WriteLine("This is a heart beat"); 
    return new JsonResult { Data = "success" }; 
} 

Désolé pour la (je crois) question simple. J'aurais demandé dans un commentaire, mais je n'ai pas encore assez de réputation, donc je ne savais pas comment faire autrement. Edit: J'ai fait quelques modifications dans mon code pour apporter quelques corrections/simplifications comme suggéré par la première réponse. Cela n'a pas résolu mon problème mais le code est plus sympa maintenant. J'ai également supprimé certaines lignes inutiles du fichier HTML (qui n'affectent pas la question, mais maintenant le code est plus clair et plus facile à comprendre d'un coup d'œil).

+1

Comme toujours, si quelqu'un a des raisons de downvote ou autrement désapprouver, j'apprécierais quelques commentaires. – Pablo

Répondre

0

Utilisation de la console du navigateur Revealed le message d'erreur:

Uncaught TypeError: Cannot read property 'ajax' of undefined

Cela signifie jQuery est pas défini, qui est résolu en incluant la ligne

<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 

dans le fichier HTML. (J'ai appris cette dernière partie dans la réponse à this question.)

1

L'expression C# @Url.Action("KeepSessionAlive", "Auxiliary") renvoie une chaîne, qui correspond à l'URL du noeud final. Ainsi, lorsque vous appelez la méthode LaunchHeartBeat, vous devez passer entre guillemets

LaunchHeartBeat('@Url.Action("KeepSessionAlive", "Auxiliary")'); 

également setTimeout exceute une seule fois. Si vous voulez quelque chose à exécuter, vous devez continuellement utiliser setInterval

Cela devrait fonctionner

var isSuccess = false; 
function LaunchHeartBeat(actionUrl) { 
    setInterval(function() { 
     $.ajax({ 
      type: "POST", 
      url: actionUrl, 
      success: function() { isSuccess = true; } 
     }); 
    }, 2000); 
} 
+0

Merci pour votre temps! Les citations étaient là avant (je les ai retirées en essayant des trucs). Je vais corriger cela, vérifier si cela résout le problème, puis éditer la question ici. Je vais utiliser setInterval, mais l'appel CheckToKeepSessionAlive() à la fin de KeepSessionAlive() ne devrait-il pas également créer une boucle? – Pablo

+0

setInterval devrait fonctionner. Voir la mise à jour j'ai posté – Shyju

+0

Laissez-moi essayer ce que vous avez fait. – Pablo