我在 Visual Studio 2008 中有一个 ASP Web 应用程序。 我的文件夹中有 jquery-1.10.2.js - JavaScriptBase
解决方案中的文件 1.仪表板.aspx 2. JavaScript/Dashboard.js
我有一个 jQuery 选项卡
<li><a href="#tabs-1" id="tab1" runat="server" onclick="GetData(0)">Today</a></li>
<li><a href="#tabs-2" id="tab2" runat="server" onclick="GetData(7)">1-7 days</a></li>
<li><a href="#tabs-3" id="tab3" runat="server" onclick="GetData(30)">30 days</a></li>
<li><a href="#tabs-4" id="tab4" runat="server" onclick="GetData(60)">60 days</a></li>
<li><a href="#tabs-5" id="tab5" runat="server" onclick="GetData(90)">90 days</a></li>
<li><a href="#tabs-6" id="tab6" runat="server" onclick="GetData(180)">180 days</a></li>
GetData() 函数位于 Dashboard.js 文件夹中的 JavaScripts
function GetData(ky)
{
var params = "{'days' : '" + ky + "'}"; // if no params need to use "{}"
alert(params);
$.ajax({
url: "Dashboard.aspx/getDataByDate",
type: 'POST',
data: params,
contentType: "application/json; charset=utf-8",
dataType: 'json',
success: function (data, status) {
loadSuccess(data, status);
},
error: function () {
alert("Oops! It's an Error");
}
});
return false;
}
在我的代码后面
public string getDataByDate(string days)
{
DataSet ds = new DataSet();
ds = getPatientVisitCount(DateTime.Today.ToString(), DateTime.Today.ToString()));
return ds.GetXml();
}
当我调用该函数时,它总是转到错误函数。
如何从js文件中调用后面代码中的函数。请帮忙...
编辑 1
我根据Grundy的建议更改了我的cs代码
[WebMethod()]
public string getDataByDate(string days)
{
DataSet ds = new DataSet();
ds = getPatientVisitCount(DateTime.Today.ToString(), DateTime.Today.ToString()));
return ds.GetXml();
}
还是没有得到..
最佳答案
我在这里注意到两件事,当它需要是 JSON 时,您将从代码隐藏方法返回 XML,并且您可能需要了解 data.d。
首先,您需要非常流行且强大的 JSON.NET用于轻松将 XML 序列化为 JSON 的 lib。我不认为 System.Web.Script.Serialization.JavaScriptSerializer (我知道你也没有使用它)是为了处理 XML 到 JSON 而构建的,因此使用 NUGET 添加 JSON.NET 库,你的后面的代码应该是:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static object getDataByDate(string days)
{
DataSet ds = new DataSet();
ds = getPatientVisitCount(DateTime.Today.ToString(), DateTime.Today.ToString()));
string json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(ds.GetXml());
return json;
}
如果您使用 .NET 3.5,即使您使用的是代码隐藏方法而不是 Web 服务,为了安全起见,您也需要了解“d”:
“这是通过 ASP.NET 3.5 中的 ASP.NET AJAX 扩展序列化的所有 ASMX 服务 JSON 的情况。即使您只返回标量返回值,例如字符串、整数或 bool 值,结果将始终包含在“d”内。”引用:http://encosia.com/a-breaking-change-between-versions-of-aspnet-ajax/
因此,如果您使用 .NET 3.5,您的 jQuey.ajax 成功回调实现需要是:
loadSuccess(data.d, status);
如果您使用 .NET 4.0 或更高版本,则无需担心“d”。
您应该考虑将此实现移至网络服务,它将与我在答案中包含的代码几乎相同。 Web 服务更适合在项目中组织 ajax 调用的代码,并且 Web 服务似乎更适合处理解析 ajax 请求和响应,而不是从代码隐藏中处理,尽管后者是一种猜测,并且 ASP.NET 可以处理具有 WebMethod 属性的方法完全相同的方式,无论是在代码隐藏中还是在 Web 服务中,但是代码的组织是在 Web 服务中实现 getDataByDate 而不是代码隐藏的充分理由,因为它本身没有“连接”到您的 aspx 页面,并且可能需要在多个页面中调用。它很容易实现,只需创建一个 services 文件夹,添加一个新的 Web 服务,将其命名为您想要的任何名称,将我答案中的相同代码复制并粘贴到 Web 服务类中,删除关键字 static,并将您的 ajax url 更改为“/services/[yourwebserivcename].asmx/getDataByDate”。
PS,我知道我的代码可以在网络服务中运行,不太确定后面的代码,但它应该可以运行。
PSS,由于是公共(public)方法,所以将web方法大写更合适,所以getDataByDate应该是GetDataByDate
关于c# - 从 jQuery 在 C# 背后的代码中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19782043/