[英]ajax call to .ashx file
有人可以检查为什么我的.ashx文件没有触发警报的原因吗
function setHeartbeat() {
setInterval("heartbeat()", 20000);
}
function heartbeat() {
alert('ajax called');
$.ajax({
type: "GET",
url: "SessionHeartbeat.ashx",
data: null,
success: function (data) {
beatHeart(30);
setHeartbeat();
}});
}
.ashx文件看起来像这样,称为SessionHeartbeat.ashx
public class SessionHeartbeat : IHttpHandler, IRequiresSessionState
{
public bool IsReusable { get { return false; } }
public void ProcessRequest(HttpContext context)
{
context.Session["Heartbeat"] = DateTime.Now;
}
}
}
这是我的web.config
<httpHandlers>
<add verb="GET,HEAD" path="SessionHeartbeat.ashx" validate="false" type="SessionHeartbeat"/>
</httpHandlers>
如果使用处理程序类,则必须将它们添加到web.config中的<httpHandlers>
标记中。
您拥有的是一个通用处理程序 。 您无需执行任何操作,因此可以将其从web.config中的<httpHandlers>
标记中删除。
只要您可以从客户端浏览器访问SessionHeartbeat.ashx
,以下代码就应该起作用。
<script>
setInterval(function() {
$.ajax({
type: "GET",
url: "<%= ResolveUrl("~/SessionHeartbeat.ashx") %>",
data: null,
success: function (data) {
console.log('Heartbeat called at ' + data);
}
});
}, 20000);
</script>
public class SessionHeartbeat : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
var dateTimeNow = DateTime.Now;
context.Session["Heartbeat"] = dateTimeNow;
context.Response.Write(dateTimeNow);
}
public bool IsReusable { get { return false; } }
}
您提到的示例在更新web.config之后起作用:
<configuration>
<!--Other settings-->
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
<system.web>
<httpHandlers>
<add verb="GET,HEAD" path="SessionHeartbeat.ashx" validate="false" type="SessionHeartbeat"/>
</httpHandlers>
</system.web>
</configuration>
但这取决于IIS版本及其配置方式。 请参阅以下答案: 通用处理程序不适用于IIS 。 它解释说,在某些情况下,通用处理程序仍需要在web.config中进行设置,而当我按照您发布的链接中的示例进行操作时,就是这种情况。
另外我之前已经在ProcessRequest中添加了响应写
public void ProcessRequest(HttpContext context)
{
context.Response.Write("Hello World");
context.Session["Heartbeat"] = DateTime.Now;
}
如果将其部署在IIS中,则可能需要注册处理程序,但在我的IIS Express中则没有必要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.