我想在代码后面设置一个会话变量,以便在收到基于设置会话变量的结果的ajax调用结果后。
这个应用程序是旧的 Webform,不是 MVC 这是我所做的 下面是我的 Test.aspx
<asp:Button ID="cmdTest" runat="server" Text="Set session value"
OnClientClick="mytest();return false"/>
<Script>
function myTest() {
console.log("Document is ready.");
$.ajax({
type: "POST",
url: "CheckBrowser.aspx/SetSessionVariable",
data: JSON.stringify({ value: 'true' }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
// Handle the server's response (if needed)
console.log("success");
},
error: function (error) {
console.log("AJAX Error: " + error);
}
});
}
</script>
这是我的 Test.aspx.cs 代码
[WebMethod(enableSession: true)]
public static void SetSessionVariable(string value)
{
HttpContext.Current.Session["myTest"] = value;
Debug.Print("session value set");
}
但是我得到请求 URL: localhost:44310/Support/Test.aspx/SetSessionVariable 请求方法: POST 状态代码: 500 远程地址: [::1]:44310 引用策略: strict-origin-when-cross-origin 参见网络流量下图 这很奇怪,因为我的起源是相同的,我只是从我的 aspx 页面执行 ajax 调用以在后面的相同 aspx 代码中设置变量。我不确定我错过了什么任何帮助将不胜感激。
我建议您发布更多标记。
那么,让我们创建一个示例网页。我们将其命名为 CheckBrowser.aspx。
我们的标记现在是这样的:
<form id="form1" runat="server">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js">
</script>
<div>
<input id="Button1" type="button" value="Set session value"
onclick="SetValue();return false;" />
<br />
<input id="Button2" type="button" value="get session value"
onclick="GetValue();return false;" />
<script>
function SetValue() {
$.ajax({
type: "POST",
url: "CheckBrowser.aspx/SetSessionVariable",
data: JSON.stringify({ value: 'Hello World' }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
// Handle the server's response (if needed)
console.log("success");
alert("Session value set")
},
error: function (error) {
console.log("AJAX Error: " + error);
}
});
}
function GetValue() {
$.ajax({
type: "POST",
url: "CheckBrowser.aspx/GetSessionVariable",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
// Handle the server's response (if needed)
alert("Session value from server = " + response.d)
console.log("success");
},
error: function (error) {
console.log("AJAX Error: " + error);
}
});
}
</script>
</div>
</form>
因此,请注意我们如何包含 jQuery 库。 (必填)。
所以,当我们运行上面的代码时,我们得到/看到这个:
所以,使用发布的代码,上面的工作就很好了。
这意味着您提供的信息不足以确定为什么上述代码可以工作,而您的代码却不能。
如前所述,我会尝试按 f12 打开浏览器工具,选择控制台,然后查看浏览器开发人员模式显示的内容。
请注意,考虑创建一个新的测试浏览器页面,更改 ajax post 示例中使用的 URL,看看是否有效。
换句话说,我们读者和这里的人无法重现您的错误。因此,您必须提供更多的页面标记,因为上面的示例工作得很好。
对于此测试,我还建议使用 HTML 按钮,而不是 asp.net 按钮,因为 JavaScript 代码中的任何错误在大多数情况下都会导致页面回发,这会隐藏您查看错误消息的能力。使用上面的 HTML 按钮并返回 false 不会导致页面回发,这应该允许您在任何 JavaScript 代码中看到错误。