Jquery的Ajax(POST模式)一般处理程序引用IRequiresSessionState接收不到传值

霜影 2019-01-04 02:14:25
问题描述:
自己做的一个项目(开发中,C#)用了electron,来桌面化网站。本机安装node.js;
数据交互都是用jQuery的Ajax来实现的;
前段时间都一直好好的,但后来好像是改动了些其他页面关联的js脚本代码,当时记的运行也正常;
但后来隔了段时间,再运行,第一个登录页面的ajax就出问题了,一般处理程序(.ashx)获取不到ajax传过来的参数值了!
后来写了最简单的测试代码来实验是否能接收到到参数,但还是不行,接收到的参数值始终都是NULL;如下图:

JS测试脚本:

function abcd() {
try {
$.ajax({
url: "../../Handlers/Handler1.ashx?rn=" + GetRandomNum(10),
type: "POST",
dataType: "json",
async: true,
data: {
canshu: "LXX"
},
//traditional: true,
success: function (data, status) {
if (data) {
var ab = data;
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
ShowErrMsg("errMsg", textStatus, true);
}
});
} catch (e) {
alert(e.message);
}
}

页面调用脚本(页面加载时调用,只看第一行就行):

<body onload="abcd();" style="overflow:hidden;"><%--GetPageSize();--%>
<form id="form1" runat="server">
<div class="divMainBody">

一般处理程序代码(不用关心返回结果,只看变量abc的值就行):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;

namespace TerminalManageSystem.Handlers
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler, IRequiresSessionState
{

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string abc = context.Request["canshu"];
context.Response.Write("Hello World");
}

public bool IsReusable
{
get
{
return false;
}
}
}
}

运行结果截图:


-------------------------分割线------------------------------------

后来发现有两种方式能让一般处理程序接收到传递的参数值:
1、脚本Ajax改为GET模式,就能正常接收;
2、或者一般处理程序把IRequiresSessionState继承去掉,也能接收到参数值;
但问题是之前一开始都是很正常的,而且我后来又新建了一个项目,简单写了个ajax,post和IRequiresSessionState都不影响!
网上查了很多资料,基本没有这方面的帖子;找到两个相同问题的帖子,但都没帮助;一个楼主解决了但没说怎么解决的,一个是换了种方式,避开使用ajax了……
所以,只能到论坛求助了,还望各位大拿给支招,最好能告知是什么原因,以及该怎么解决……非常感谢!
...全文
213 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
霜影 2019-01-23
  • 打赏
  • 举报
回复
已经解决了,最后发现是配置文件的问题!
配置文件里我加了一个节点:
<sessionState mode="StateServer" cookieless="false" timeout="540" />

当时cookieless="true",就是这个,导致Session的ID放到了URL里,所以才导致的不正常。
应该是当时查资料时,记错了,给设成true了。
希望后来有相同问题的朋友,可以先查下你的配置文件里是否有这一项!
霜影 2019-01-04
  • 打赏
  • 举报
回复
引用 3 楼 丰云 的回复:
进一步解释一下,IRequiresSessionState接口,原本是提供给asp.net服务端程序用于控制asp.net网页的,设计之初本就不是给webapi服务使用的,只是后面的人不明就里,只知道继承这个接口就可以使用session,却忽略了他的局限性和影响范围,才导致后面这些问题

非常感谢热心解答!
丰云 2019-01-04
  • 打赏
  • 举报
回复
进一步解释一下,IRequiresSessionState接口,原本是提供给asp.net服务端程序用于控制asp.net网页的,设计之初本就不是给webapi服务使用的,只是后面的人不明就里,只知道继承这个接口就可以使用session,却忽略了他的局限性和影响范围,才导致后面这些问题
丰云 2019-01-04
  • 打赏
  • 举报
回复
另外,启用了session,第一次访问,会加载SessionID,导致链接被重置,所以取不到参数。 因此,可以考虑第一次访问,先发送一个无参的get请求,回避掉这个问题,应该也可以解决了
丰云 2019-01-04
  • 打赏
  • 举报
回复
继承IRequiresSessionState目的是为了使用session,但session完全可以用cache替代,所以,我建议你去掉IRequiresSessionState的继承,然后在需要用session的地方,用cache来替代
这个是完整源码 python实现 大数据 Spark pyspark 可视化大屏+Kafka+FastAPI+Vue3 【大数据毕业设计】基于Spark实时电商用户行为分析与预测(Python版本+pyspark+可视化大屏+Kafka+FastAPI+Vue3) 源码+论文 完整版 数据库Mysql 随着电子商务规模持续扩大,用户在浏览、加购、收藏与购买等环节产生的行为数据呈现高并发、高吞吐与强时效特征。传统离线批处理分析难以满足运营决策对实时性的要求。本文设计并实现了一套基于 Spark 的实时电商用户行为分析与预测系统,围绕“数据采集—流式计算—指标落库—可视化展示—销售预测”的完整链路展开研究与工程实践。 系统采用前后端分离架构:前端基于 Vue3、Element Plus 与 ECharts 构建管理端与数据大屏;后端采用 Python FastAPI 提供 RESTful 接口,并结合 JWT 完成管理员身份认证;实时链路以 Kafka 作为消息中间件承接行为事件,以 Spark Structured Streaming 完成按小时窗口的 PV、UV、加购、收藏、购买与销售额聚合;预测模块基于 Spark ML 线性回归对销售额序列进行建模,并输出 RMSE、MAE、MAPE 等误差指标。数据持久化采用 MySQL,数据库名为 db_ecommerce,核心业务表均以 t_ 前缀命名。 测试结果表明,系统能够稳定完成管理员登录、个人中心维护、行为与商品管理、实时统计展示、销售预测对比及流水线状态监控等功能,具备较好的可扩展性与教学示范价值,可为电商运营提供实时洞察与辅助决策支持。 本文的主要工作包括:完成系统需求分析与总体架构设计;绘制实体属性图与实体关系图并完成八张核心业务表设计;实现基于 Kafka 与 Spark 的实时统计及销售预测链路;完成 Vue

87,988

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧