我正在开发经典ASP 网站。在一种形式中,将从UPS站点获取结果以显示运费,现在在第一次请求时从 UPS站点获取结果时,通常需要几分钟的时间来回复。
因此,为了改善用户对网站的体验,此UPS运费计算应在后台完成,当后台流程完成后,结果应显示为表格。
为了解决这个问题,我们使用了 jQuery AJAX 方法,但问题是用户必须在同一页面上停留一分钟,直到UPS响应,如果他导航到其他页面,XHR请求将被中止。
那么你能建议,对于后台进程,哪种方式必须在Classic ASP中选择,或者如何在不中止AJAX请求的情况下导航到其他页面?
答案 0 :(得分:1)
对于诸如此类的慢速后端进程,使用基于服务器端的sql队列系统几乎总是一个好主意。
具体来说,在您的服务器上,创建二进制/服务/脚本以读取队列表,从UPS获取数据并将结果写回队列表 - 保持状态ID。
然后,您的所有站点需要做的是将请求插入到队列表中,然后您可以使用ajax继续检查队列表以查看数据是否存在。
非常基本示例(如果没有您举例,很难说):
CREATE TABLE [dbo].[ParcelQueue](
[JobID] [int] IDENTITY(1,1) NOT NULL,
[RequestTime] [datetime] NULL,
[ParcelTrackingNumber] [varchar](255) NULL,
[StatusID] [smallint] NULL,
[Result_DeliveryDate] [datetime] NULL,
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED
(
[JobID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[test] ADD CONSTRAINT [DF_test_RequestTime] DEFAULT (getdate()) FOR [RequestTime]
GO
潜在状态ID:
答案 1 :(得分:1)
我只是创建了一个ASP页面,它将以Async方式将虚拟数据传递给UPS服务,而不是创建后台窗口进程,该进程将定期调用该ASP页面。
这样,无论用户何时到达现场,他们都不会因为第一次UPS请求而遇到响应缓慢,因为我们的后台流程已经使UPS通道保持打开状态。