创建: 一个处理程序,它检查数据库是否有新的消息。
到目前为止我做了什么: 使用AJAX的Javascript每三秒运行一次处理程序。
我无法做到的事情:将ASHX处理程序的结果返回给AJAX javascript,以便在结果为真时执行回发。
这是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);
这是处理程序:
<%@ 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
任何帮助/建议表示赞赏。谢谢。
答案 0 :(得分:0)
调用处理程序时缺少函数名称。 请更改代码如下:
url: "handlecb.ashx/ProcessRequest",
type: "POST",