Ajax调用对c#方法不起作用

本文关键字:方法 不起作用 调用 Ajax | 更新日期: 2023-09-27 18:08:53

我想在关闭或重定向其他页面时调用解锁方法,所以我使用ajax调用。但是unlock方法没有触发。请让我知道我在做什么

 [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;

Ajax调用对c#方法不起作用

您在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;

有几个问题。首先,你的WebMethod期望一个querystring参数,然而你正在发送一个POST请求,你也没有在请求中发送任何数据。您应该在AJAX请求的data属性的对象中将project_id作为参数提供。

还请注意,在onbeforeunload事件中发送AJAX请求是在AJAX请求完成之前需要使用async: false阻止页面关闭的极少数合法情况之一。试试这个:

[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请求。