我想在关闭或重定向其他页面时调用unlock方法,所以我使用了ajax调用。但解锁的方法没有解雇。请让我知道我在做什么
[WebMethod]
public void Unlock()
{
CreateProject_BL _objcreatebl = new CreateProject_BL();
_objcreatebl.upd_lockedBy(Convert.ToInt32(Request.QueryString["project_id"]), "");
}
function HandleOnclose() {
$.ajax({
type: "POST",
url: "ProjectDetails.aspx/Unlock",
contentType: "application/json; charset=utf-8",
dataType: "json"
});
}
window.onbeforeunload = HandleOnclose;
答案 0 :(得分:0)
你在ajax调用中传递project_id的地方??? 在你的方法中传递project_id
[WebMethod]
public void Unlock(string project_id)
{
CreateProject_BL _objcreatebl = new CreateProject_BL();
_objcreatebl.upd_lockedBy(Convert.ToInt32(Request.QueryString["project_id"]), "");
}
然后将ajax调用重写为
function HandleOnclose() {
$.ajax({
type: "POST",
url: "ProjectDetails.aspx/Unlock",
contentType: "application/json; charset=utf-8",
data : "{project_id:'1234'}",
dataType: "json"
});
}
window.onbeforeunload = HandleOnclose;
答案 1 :(得分:0)
有几个问题。首先,您的WebMethod需要一个查询字符串参数,但您发送的是POST请求,并且您也不会在请求中发送任何数据。您应该将project_id
作为参数提供给AJAX请求的data
属性。
另请注意,在onbeforeunload
事件中发送AJAX请求是极少数合法情况之一,您需要使用async: false
在AJAX请求完成之前停止关闭页面。试试这个:
[WebMethod]
public void Unlock(string projectId)
{
CreateProject_BL _objcreatebl = new CreateProject_BL();
_objcreatebl.upd_lockedBy(Convert.ToInt32(projectId), "");
}
function HandleOnclose() {
$.ajax({
type: "POST",
async: false, // only due to running the code in onbeforeunload. Never us it otherwise!
url: "ProjectDetails.aspx/Unlock",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: { projectId: '1234' }
});
}
window.onbeforeunload = HandleOnclose;
另请注意,根据浏览器的不同,您可能无法在onbeforeunload
事件中发送AJAX请求。有关详细信息,请参阅this question。