首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Jquery AJAX不触发某些c# webmethods

Jquery AJAX不触发某些c# webmethods
EN

Stack Overflow用户
提问于 2018-12-14 04:39:40
回答 1查看 40关注 0票数 0

我遇到了一个奇怪的问题。我正在使用来自我的页面的几个AJAX调用。一些方法不触发相应的方法,而另一些则返回整个页面的HTML。

下面是可以工作的代码: JS:

/***************************************************************
function getBoothData():

retrieve data for site on site change or page load
/**************************************************************/
function getBoothData() {
    var location = $("input[name=siteMap]:checked").val();
    $(".desk").remove();
    //Get booth data
    $.ajax({
        type: "POST",
        url: "./default.aspx/deskData",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: JSON.stringify({ "location": location }),
        success: function (response) {
            siteID = location;
            data = response.d;
            showData(data.Desks);
        },
        failure: function (response) {
            alert(response.d);
        }
    }); //$.ajax()
} //getBothData()
/**************************************************************
end getBoothData()
/**************************************************************/

C#:

[WebMethod]
    public static DeskItemList deskData(string location)
    {
        DataTable dt = new DataTable();

        string query = "select * from tblSiteLayout where SiteID=(select ID from tblSiteLayoutSites where UPPER(SiteName)=UPPER('{0}'))";
        query = string.Format(query, location);
        SqlConnection con;
        SqlCommand cmd = getCmd(query, out con);
        con.Open();
        dt.Load(cmd.ExecuteReader());
        con.Close();

        var DeskList = new DeskItemList();
        DeskList.Desks = new List<desk>();
        foreach (DataRow dr in dt.Rows)
        {
            desk d = new desk();
            d.id = dr["id"].ToString();
            d.x = Convert.ToInt32(dr["x"]);
            d.y = Convert.ToInt32(dr["y"]);
            d.height = Convert.ToInt32(dr["height"]);
            d.width = Convert.ToInt32(dr["Width"]);
            d.UserLogon = dr["UserLogon"].ToString().Trim();
            d.DeskID = dr["DeskID"].ToString().Trim();
            d.Extension = dr["Extension"].ToString().Trim();
            d.Assets = dr["Assets"].ToString().Trim();
            d.computerIP = dr["ComputerIP"].ToString().Trim();
            d.RAM = dr["RAM"].ToString().Trim();
            d.HDD = dr["HDD"].ToString().Trim();
            d.SiteID = dr["SiteID"].ToString().Trim();
            d.Department = dr["Department"].ToString().Trim();
            d.deskType = (int)dr["deskType"];
            d.rotation = (int)dr["rotation"];
            d.UserName = dr["UserName"].ToString();

            // d.usrImg = dr["userImg"].ToString();

            DeskList.Desks.Add(d);
        }

        return DeskList;
    }

上面的调用运行得很好,而下面的函数根本不会被调用:

JS:

/***************************************************************
function fillData(obj):

Takes associated data from element and applies it to 
the edit form
/**************************************************************/
function fillData(obj) {
    //add data to element to show and edit from editData div
    $("#rowID").text(obj.data("rowID"));
    $("#deskID").val(obj.data("deskID"));
    $("#user").text(obj.data("user"));
    $("#empID").text(obj.data("empID"));
    $("#ext").text(obj.data("ext"));
    $("#dept").text(obj.data("dept"));

    var desk=obj.data("rowID");

    //retrieve user image
    $.ajax({
        type: "post",
        url: "default.aspx/getImageForDesk",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: '{ "deskID":' + desk + '}',
        success: function (response) {
            var data = response.d;
            $("#userImg").attr('src',data);
        },
        failure: function (response) {
            alert(response.d);
        },
         error: function (resp, textStatus, errorThrown) {
            console.log(errorThrown);
            //alert("Status: " + textStatus); 
            //alert("Error: " + XMLHttpRequest.responseText);
            var a=resp.responseText;

        },
        complete: function (resp, status){
            //console.log(resp.responseText);
            //alert(status);
        }
    }); //$.ajax()
}
/**************************************************************
end fillData()
/**************************************************************/

C#:

[WebMethod]
    public string getImageForDesk(int deskID)
    {
        string ret = "";
        //if (Convert.ToInt32(deskId) > 1)
        int deskId = deskID;

        if ((int)deskId >= 1)
        {

            string query = "select usrImage from tblSiteLayout where id=" + deskId;
            SqlConnection con = MCAIntranet.Data.Connections.ConDEV();
            SqlCommand cmd = new SqlCommand(query, con);
            con.Open();
            byte[] img = (byte[])cmd.ExecuteScalar();
            con.Close();

            System.IO.File.WriteAllBytes(Server.MapPath("./images/tempUser.png"), img);

            ret = "tempUser.png";
        }
        return ret;
        //        return JsonConvert.SerializeObject(new {image = ret});
    }

无论出于什么原因,即使(据我所知)调用和接收签名是相同的。错误函数只是告诉我,它不能将返回的HTML解析为JSON,所以这对我来说是无用的。对于我在这方面哪里出了问题,有什么建议吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-12-14 06:26:04

正如Haldo在评论中指出的那样,web方法需要是静态的。我不使用静态的原因是因为我想保存一个文件以便使用图像。通过返回Base64字符串并将其用作图像源,解决了此问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53769724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档