2016-04-03 20 views
0

Erstellen: Ein Handler, der Datenbank eincheckt, wenn es eine neue Nachricht gibt.Daten von ASHX in AJAX erhalten JavaScript

Was ich bisher gemacht habe: Javascript, dass AJAX verwendet eine Handler alle drei Sekunden.

Was ich nicht tun kann: Rückgabe eines Ergebnisses von ASHX Handler zu AJAX Javascript, so dass ich ein Postback durchführen kann, wenn das Ergebnis wahr ist.

Hier ist das Javascript:

//handle message upload 

     window.setInterval(function() { 

      $.ajax({ 
       url: "handlecb.ashx", 
       type: "POST", 

       success: function (result) { 
        toastr.options = { 
         "closeButton": false, 
         "debug": false, 
         "newestOnTop": true, 
         "progressBar": false, 
         "positionClass": "toast-bottom-left", 
         "preventDuplicates": true, 
         "onclick": null, 
         "showDuration": "1300", 
         "hideDuration": "1300", 
         "timeOut": "5300", 
         "extendedTimeOut": "1000", 
         "showEasing": "swing", 
         "hideEasing": "linear", 
         "showMethod": "fadeIn", 
         "hideMethod": "fadeOut" 
        } 
        toastr.info('Online.'); 

        if (result < 0) { 
         __doPostBack("<%= senbut.ClientID %>", ""); 
         toastr.options = { 
          "closeButton": false, 
          "debug": false, 
          "newestOnTop": true, 
          "progressBar": false, 
          "positionClass": "toast-bottom-left", 
          "preventDuplicates": true, 
          "onclick": null, 
          "showDuration": "1300", 
          "hideDuration": "1300", 
          "timeOut": "5300", 
          "extendedTimeOut": "1000", 
          "showEasing": "swing", 
          "hideEasing": "linear", 
          "showMethod": "fadeIn", 
          "hideMethod": "fadeOut" 
         } 
         toastr.success('New message recieved.'); 
        } 


       }, 
       error: function (err) { 
        toastr.options = { 
         "closeButton": false, 
         "debug": false, 
         "newestOnTop": true, 
         "progressBar": false, 
         "positionClass": "toast-bottom-left", 
         "preventDuplicates": true, 
         "onclick": null, 
         "showDuration": "1300", 
         "hideDuration": "1300", 
         "timeOut": "5300", 
         "extendedTimeOut": "1000", 
         "showEasing": "swing", 
         "hideEasing": "linear", 
         "showMethod": "fadeIn", 
         "hideMethod": "fadeOut" 
        } 
        toastr.danger('Offline'); 

       } 
      }); 
     }, 3000); 

Hier ist der Handler:

<%@ WebHandler Language="VB" Class="handlecb" %> 

    Imports System.Data 
    Imports System.IO 
    Imports System.Data.OleDb 
    Imports System.Web.SessionState 
    Imports System.Web.Security 
    Imports System.Web 

     Public Class handlecb 
      Implements IHttpHandler, System.Web.Session 

State.IRequiresSessionState 

    Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Ishaan Patel\Desktop\Paperhome\paperhome_data.accdb") 


Dim cmd As OleDbCommand 
Dim cmd2 As OleDbCommand 
Dim da As OleDbDataAdapter 
Dim ds As New DataSet 
Dim dr As OleDbDataReader 
Dim result As Integer 

Public Sub ProcessRequest(ByVal context As HttpContext) Implements System.Web.IHttpHandler.ProcessRequest 
    Dim threadid As String 
    If Not context.Session("chatsess") Is Nothing Then 
     threadid = context.Session("chatsess") 
     GoTo b 
    Else 
     GoTo a 
    End If 
    b: 
    Dim thread As Integer 
    thread = Convert.ToInt32(threadid) 


    con.Open() 'checklastupdatedon 
    cmd = New OleDbCommand("SELECT [last_updated_on] FROM [message_threads] WHERE ([message_threads].[thread_id] = " & thread & ")", con) 
    cmd.Connection = con 
    dr = cmd.ExecuteReader 
    If (dr.Read) Then 
     Dim fetched As Date = Convert.ToDateTime(dr("last_updated_on")) 
     Dim old As Date = Convert.ToDateTime(context.Session("last_updated_on")) 

     result = DateTime.Compare(old, fetched) 
     con.Close() 

     If result < 0 Then 'old fetched is earlier than timer fetched 

      context.Session("last_updated_on") = fetched 

     End If 

    End If 
    a: 
End Sub 

Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable 
    Get 




    Return result 
    End Get 
End Property 
End Class 

Jede Hilfe/Anregung geschätzt wird. Vielen Dank.

Antwort

0

Der Funktionsname fehlt beim Aufruf des Handlers. Bitte ändern Sie den Code wie folgt:

url: "handlecb.ashx/ProcessRequest", 
type: "POST", 
+0

Hat das getan. Es wird immer noch nicht benachrichtigt, wenn eine neue Nachricht empfangen wird. Ich habe versucht, die Logik auf Knopfdruck und es funktioniert gut, so bin ich sicher, dass der Handler nicht das Problem ist. Ist die Art, wie ich das Ergebnis zurückgebe, korrekt? –

+0

Bitte posten Sie die Antwort, die Sie nach dem Klicken auf die Schaltfläche erhalten. – user3151766

+0

Es gibt keinen Knopfklick, der passiert oder passieren soll. All das soll ohne Knopfdruck funktionieren. Der Code innerhalb von Ergebnis <0 wird ausgeführt. Führe mich auf eine Weise, die es mir ermöglicht, einen Wert innerhalb dieses Blocks zu korrigieren und denselben Wert vom Handler an das Javascript zu senden. –