Jquery 不能';t使用Ajax调用服务器端方法
我使用3层体系结构来演示应用程序 我试图使用Ajax从表示层调用业务逻辑层方法。但它显示出错误。我认为传递url时有一些错误 下面是演示层中Index.aspx页面的Ajax调用:Jquery 不能';t使用Ajax调用服务器端方法,jquery,asp.net,ajax,3-tier,Jquery,Asp.net,Ajax,3 Tier,我使用3层体系结构来演示应用程序 我试图使用Ajax从表示层调用业务逻辑层方法。但它显示出错误。我认为传递url时有一些错误 下面是演示层中Index.aspx页面的Ajax调用: $.ajax({ type: "GET", url: "DemoApplication.BLL/BLL/ShowDetail", contentType: "application/json; charset=utf-8", dataType: "json", data: {
$.ajax({
type: "GET",
url: "DemoApplication.BLL/BLL/ShowDetail",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: { },
success: function (msg) {
alert("data received");
},
error: function () {
alert("couldn't proceed");
}
});
下面是我在业务逻辑层的方法:
namespace DemoApplication.BLL
{
public class BLL
{
public static List<User> ShowDetail()
{
DAL.DAL dal = new DAL.DAL();
return dal.ShowDetail();
}
}
}
namespace DemoApplication.BLL
{
公共类BLL
{
公共静态列表ShowDetail()
{
DAL.DAL=新的DAL.DAL();
返回dal.showtail();
}
}
}
我认为您有点困惑,如果您试图从浏览器中调用中间层方法,则可能有问题。如果这一点得到支持,请思考其影响。在我的业务逻辑层中,我可能有一些从未从表示层公开的方法。可能是某个后端维护工具使用的DropClientDatabase()。如果我可以通过JavaScript直接调用这个方法呢?这意味着任何有一点HTML和JavaScript技能的人都可以调用DropClientDatabase(),给用户带来很多问题。由于此方法位于BLL层,可以想象它不直接执行任何类型的身份验证检查(这可能是调用它的先决条件),因此任何人都可以删除数据库。我们当然不希望这样
我们需要明确定义可以从AJAX调用的方法,部分是作为一种安全手段。业务层中的List showdeail()
方法应该从表示层代码(aspx.cs)中调用,如下所示
[WebMethod]
public static List<User> ShowDetail()
{
//Call your method something like this
var myVar = BLL.ShowDetail();
//This will return your list in a JSON Format
return myVar;
}
以下是我在项目中的实施方式: AJAX
$.ajax({
url: 'DataViewer.aspx/GetData',
dataType: "json",
type: 'POST',
data: {},
contentType: "application/json; charset=utf-8",
success: function (data) {
},
error: function (d) {
}
});
ASP.NET
public partial class DataViewer: System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static List<UserResult> GetData()
{
//No need to manually serialize the generic list
return UserInfo.GetData();
}
public部分类DataViewer:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
}
[网络方法]
公共静态列表GetData()
{
//无需手动序列化通用列表
返回UserInfo.GetData();
}
注:
代码隐藏中的方法应具有
[WebMethod]
属性,它应该是public static
您需要调用的web方法,它不能是任何服务器方法。url不应该是类的路径…它应该是Index.aspx/TheMethod,其中TheMethod是Index.aspx上的web方法。您不能只调用世界上的任何方法…那会非常可怕!D使用[WebMethod]
@dman2306方法对函数进行ecorate与表示层在相同的解决方案中,但在不同的解决方案中projet@mhu我已经用[WebMethod]装饰了这个方法但是仍然有错误奇怪,为什么你要调用序列化程序而不是仅仅返回myVar;让框架来处理它?@dman2306很好,我认为框架不能处理转换本身,因为它不是一个字符串,是一个列表变量,返回方法的是什么,但是读取文档,它看起来像是内部调用我已经准备好了,说得好
public partial class DataViewer: System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static List<UserResult> GetData()
{
//No need to manually serialize the generic list
return UserInfo.GetData();
}