2008-08-26 6 views
5

Je suis sur le point de démarrer une fonction assez lourde Ajax dans l'application de mon entreprise. Ce que je dois faire est de faire un rappel Ajax toutes les quelques minutes, un utilisateur a été sur la page. Je n'ai pas besoin de faire de mises à jour DOM avant, après ou pendant les rappels. Rappels JavaScript ASP.NET sans PostBack complet?

  • Je ne ai pas besoin d'informations de la page, juste d'un cookie du site qui doit toujours être envoyé aux demandes de toute façon, et une valeur d'identité. Ce que je suis curieux de savoir, c'est s'il existe un moyen simple et propre de faire un rappel JavaScript Ajax à une page ASP.NET sans afficher le reste de l'information sur la page. Je ne voudrais pas avoir à faire cela si c'est possible.

    Je veux juste être en mesure d'appeler une méthode unique sur la page, rien d'autre.

    En outre, je suis limité à ASP.NET 2.0, donc je ne peux pas utiliser l'une des nouvelles fonctionnalités ASP AJAX du framework 3.5, bien que je puisse utiliser les extensions ASP AJAX pour le framework 2.0.

    MISE À JOUR
    J'ai décidé d'accepter la réponse de DanP comme il semble être exactement ce que je cherche. Notre site utilise déjà jQuery pour certaines choses, donc j'utiliserai probablement jQuery pour faire des requêtes car dans mon expérience, il semble que cela fonctionne beaucoup mieux que le framework AJAX d'ASP.

    Que pensez-vous serait la meilleure méthode de transfert de données vers l'IHttpHandler? Dois-je ajouter des variables à la chaîne de requête ou POST les données que je dois envoyer? La seule chose que je pense que je dois envoyer est un seul ID, mais je ne peux pas décider quelle est la meilleure méthode pour envoyer l'ID et que le IHttpHandler le gère. Je voudrais trouver une solution qui empêcherait une personne ayant des compétences informatiques de base d'accéder accidentellement ou intentionnellement à la page ou de répéter des demandes. Est-ce possible?

  • Répondre

    6

    Si vous ne voulez pas créer une page blanche, vous pouvez appeler un fichier IHttpHandler (de ashx):

    public class RSSHandler : IHttpHandler 
        { 
         public void ProcessRequest (HttpContext context) 
         { 
          context.Response.ContentType = "text/xml"; 
    
          string sXml = BuildXMLString(); //not showing this function, 
          //but it creates the XML string 
          context.Response.Write(sXml); 
         } 
    
         public bool IsReusable 
         { 
          get { return true; } 
         } 
    
        } 
    
    2

    Vous n'êtes pas seulement limité à ASP.NET AJAX mais pouvez utiliser n'importe quelle bibliothèque tierce comme jQuery, YUI, etc. pour faire la même chose. Vous pouvez ensuite faire une demande à une page vierge sur votre site qui devrait retourner les en-têtes qui contiennent les cookies.

    -1

    Vous pouvez également utiliser WebMethods qui sont intégrés dans la bibliothèque ajax asp.net. Vous créez simplement une méthode statique sur le codebehind de la page et appelez cela à partir de votre Ajax.

    Il y a un exemple assez basique de la façon de le faire here

    -1

    Vous devez utiliser un service Web (.asmx). Avec ASP.NET AJAX de Microsoft, vous pouvez même générer automatiquement les stubs.

    2

    Mon vote est la suggestion de HTTPHandler ainsi. J'utilise cela souvent. Parce qu'il n'invoque pas une instance de la classe de page, il est très léger. Toutes les astuces de framework ASP.NET AJAX instancient réellement et créent à nouveau la page entière sur le backend par appel, ce sont donc d'énormes ressources. Par conséquent, mon style typique de XmlHttpRequest retour à un HttpHandler.

    3

    Selon vous, quelle serait la meilleure méthode de transfert de données vers le IHttpHandler? Devrais-je ajouter des variables à la chaîne de requête ou POST les données que je dois envoyer? La seule chose que je pense devoir envoyer est un ID unique, mais je ne peux pas décider quelle est la meilleure méthode pour envoyer l'ID et que le IHttpHandler le gère. Je voudrais trouver une solution qui empêcherait une personne ayant des compétences informatiques de base d'accéder accidentellement ou intentionnellement la page directement

    Vu le rappel est enterré dans le code client, il faudrait quelqu'un avec la même détermination pour obtenir la requête querystring ou la requête POST. IE, si elles ont firebug, votre également vissé. Donc, dans ce cas, faites ce qui est le plus facile pour vous (Indice: j'utiliserais juste la chaîne de requête).

    Pour gérer les demandes récurrentes/accès direct, je générerais une clé qui est envoyée avec chaque demande. Peut-être un hachage de l'heure actuelle (Fuzzy, je descendrais aux minutes, mais pas les secondes en raison de la latence du réseau) + l'IP client. Ensuite, dans le HTTPHandler, exécutez le même hachage et exécutez uniquement s'ils correspondent.

    1

    Étant donné que vous utilisez uniquement ASP.NET 2.0, je recommanderais AjaxPro qui créera le fichier .ashx. Tout ce que vous avez à faire est de tirer le AjaxPro.dll dans votre site Web. J'ai développé une application complète avec AjaxPro et j'ai trouvé que ça marchait très bien. Il utilise la sérialisation pour transmettre les objets d'avant en arrière.

    Ceci est juste un exemple sur la façon de simplement l'utiliser.

    namespace MyDemo 
    { 
        public class Default 
        { 
        protected void Page_Load(object sender, EventArgs e) 
        { 
         AjaxPro.Utility.RegisterTypeForAjax(typeof(Default)); 
        } 
    
        [AjaxPro.AjaxMethod] 
        public DateTime GetServerTime() 
        { 
         return DateTime.Now; 
        } 
        } 
    } 
    

    Pour appeler via JavaScript, il est aussi simple que

    function getServerTime() 
    { 
        MyDemo._Default.GetServerTime(getServerTime_callback); // asynchronous call 
    } 
    
    // This method will be called after the method has been executed 
    // and the result has been sent to the client. 
    
    function getServerTime_callback(res) 
    { 
        alert(res.value); 
    } 
    

    EDIT

    Vous devez également ajouter

    Pour la config. AjaxPro fonctionne également bien avec APS.NET Ajax et vous pouvez passer des objets C# du client à Sever si la classe est marquée comme [Serializable]

    1

    Juste pour offrir une perspective différente, vous pouvez également utiliser une méthode PageMethod sur votre page d'accueil. Dave Ward a un bon post qui illustrates cela.Essentiellement, vous utilisez jQuery ajax message pour appeler la méthode, comme illustré dans le poste de Dave:

    $.ajax({ 
        type: "POST", 
        url: "Default.aspx/GetFeedburnerItems", 
        // Pass the "Count" parameter, via JSON object. 
        data: "{'Count':'7'}", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function(msg) { 
         BuildTable(msg.d); 
        } 
        }); 
    

    Pas besoin d'extensions Asp.Net Ajax du tout.

    Questions connexes