Frage

Ich bin zu starten eine ziemlich Ajax heavy-Funktion in mein Unternehmen.Was ich tun muss, ist eine Ajax-callback alle paar Minuten ein user auf der Seite.

  • Ich muss nicht alle DOM-Aktualisierungen vor, nach oder während der Rückrufe.
  • Ich brauche keine Informationen von der Seite, gerade von einem Website-cookie sollte immer gesendet werden mit Anfragen sowieso, und ein ID-Wert.

Was ich bin neugierig zu erfahren, ist, wenn es ist jede saubere und einfache Weg, um eine JavaScript-Ajax-callback zu einer ASP.NET Seite ohne Veröffentlichung wieder den rest der Informationen auf der Seite.Ich möchte nicht müssen dies tun, wenn es möglich ist.

Ich wollt eigentlich nur in der Lage sein, um eine einzelne Methode aufrufen, auf der Seite, sonst nichts.

Außerdem bin ich nur auf ASP.NET 2.0, so kann ich nicht die neuen 3.5-framework ASP AJAX-features, obwohl ich das ASP AJAX-Erweiterungen für das 2.0-framework.

UPDATE
Ich habe beschlossen, zu akzeptieren DanP's Antwort, wie es zu sein scheint, genau das, was ich Suche.Unsere Website nutzt bereits jQuery für einige Dinge, so werde ich wahrscheinlich verwenden Sie jQuery für Anfragen da in meiner Erfahrung scheint es viel besser als ASP AJAX-framework verwendet.

Was glaubst du, wäre die beste Methode zum übertragen von Daten an die IHttpHandler?Sollte ich Variable hinzufügen, um die query-string-oder POST Daten, die ich senden müssen?

Das einzige, was ich glaube, ich habe zu senden, ist eine einzige ID haben, aber ich kann nicht entscheiden, was die beste Methode ist zu senden Sie die ID und die IHttpHandler Griff es.Ich möchte, um zu einer Lösung zu kommen, die verhindern würde, dass eine person mit grundlegenden Computerkenntnissen, die aus versehen oder absichtlich den Zugriff auf die Seite direkt oder wiederholte Anfragen.Ist das möglich?

War es hilfreich?

Lösung

Wenn Sie nicht möchten, erstellen Sie eine leere Seite, die Sie nennen könnten IHttpHandler (ashx-Datei):

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; }
        }

    }

Andere Tipps

Sollten Sie benutzen ASP.Net Rückrufe, die eingeführt wurden Asp.Net 2.0.Hier ist ein Artikel, sollte Euch eingestellt, um zu gehen:

Implementierung von Client-Callbacks Programmgesteuert Ohne Postbacks in ASP.NET Web-Seiten

Edit:Auch betrachten dies:ICallback & JSON JavaScript-Basierte Serialisierung

Was glaubst du, wäre die beste Methode zum übertragen von Daten an die IHttpHandler?Sollte ich Hinzugefügt-Variablen im query-string-oder POST Daten, die ich senden müssen?Das einzige, was ich glaube, ich habe zu senden, ist eine einzige ID haben, aber ich kann nicht entscheiden, was die beste Methode ist zu senden Sie die ID und die IHttpHandler Griff es.Ich möchte, um zu einer Lösung zu kommen, die verhindern würde, dass eine person mit grundlegenden Computerkenntnissen, die aus versehen oder absichtlich den Zugriff auf die Seite direkt

Angesichts der Rückruf ist begraben in der client-code, die es dauern würde, jemanden mit der gleichen Entschlossenheit zu bekommen, entweder die querystring-oder POST-Anfrage.DH, wenn Sie firebug, Ihre ebenso geschraubt.

Also in diesem Fall tun, was ist am einfachsten für Sie (Hinweis:Ich würde nur verwenden Sie die Abfragezeichenfolge).

Zu behandeln wiederkehrende Anfragen/direct access, würde ich einen Schlüssel erzeugen, dass ist gesendet mit jeder Anfrage.Vielleicht ein hash der aktuellen Zeit (Fuzzy, würde ich gehen bis zu Minuten, aber nicht in Sekunden aufgrund von Netzwerk-Latenzzeiten) + die client-IP ist.

Dann in den HTTPHandler, führen Sie den gleichen hash, und nur ausgeführt werden, wenn Sie übereinstimmen.

Sie sind nicht nur auf ASP.NET AJAX aber verwenden können jede 3rd-party-Bibliothek wie jQuery, YUI etc, das gleiche zu tun.Sie können nur dann eine Anfrage, um eine leere Seite auf Ihrer Website sollte den Header enthalten, der von cookies.

Meine Stimme ist mit den HTTPHandler Vorschlag als gut.Ich verwenden diese oft.Weil es nicht berufen, eine Instanz der page-Klasse, es ist sehr leicht.

Alle ASP.NET AJAX-framework-tricks, die tatsächlich instanziieren und erstellen die gesamte Seite wieder auf die backend-pro Anruf, so Sie sind riesig resource hogs.

Daher mein typischer Stil von XmlHttpRequest wieder zu einem HttpHandler.

Da Sie nur ASP.NET 2.0 würde ich empfehlen AjaxPro wird das schaffen .ashx-Datei.Alles, was Sie tun müssen, ist zu ziehen Sie die AjaxPro.dll in Ihre web-site.Ich entwickelte eine komplette Anwendung mit AjaxPro und fand es sehr gut funktioniert.Es verwendet die Serialisierung zu übergeben Objekte hin und her.

Dies ist nur ein Beispiel, wie einfach es zu benutzen.

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;
    }
  }
}

Nennen Sie es per JavaScript so einfach ist es

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);
}

BEARBEITEN

Sie müssen auch hinzufügen

In der config.AjaxPro arbeitet auch Seite an Seite mit APS.NET Ajax und die Sie übergeben können C# - Objekte vom Client zum Server, wenn die Klasse markiert als [Serializable]

Nur zu bieten eine andere Perspektive, Sie können auch eine PageMethod auf Ihrer Haupt-Seite.Dave Ward hat einen schönen Beitrag, der illustriert diese.Im wesentlichen verwenden Sie jQuery-ajax-post-Aufruf der Methode, wie abgebildet, in Dave ' s post:

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

Keine Notwendigkeit für Asp.Net Ajax-Erweiterungen überhaupt.

Sie können auch verwenden, WebMethods, die errichtet sind, in die asp.net ajax-Bibliothek.Erstellen Sie einfach eine statische Methode, die auf der Seite codebehind-und Aufruf, der von Ajax.

Es ist ein ziemlich einfaches Beispiel, wie es zu tun hier

Sollten Sie eine web-service - (.asmx).Microsoft ASP.NET AJAX-Sie können sogar die automatische Generierung der stubs.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top