【问题标题】:Can you use jQuery ajax to retrieve data from Webservice?您可以使用 jQuery ajax 从 Webservice 检索数据吗?
【发布时间】:2013-08-18 00:58:41
【问题描述】:

我正在尝试从 SQL Server 数据库中检索数据,并使用 jQuery ajax 来完成。我需要将这些数据带入一些 jqPlot 图表中,并认为这是最好的方法。如果有更好的方法,请告诉我。

这是我当前的代码:

Javascript/jQuery:

$(document).ready(function () {

$(".datepicker").datepicker();

$(".submitButton").click(handleSubmitButton);

});      //end of document ready

function handleSubmitButton() {

   var AnDParms = new Object();
   AnDParms.startDate = $('.start-date').val();
   AnDParms.endDate = $('.end-date').val();
   AnDParms.facility = $('.FacilityDDL').val();

   var DTO = { 'parameters': AndParms };

   $.ajax({
       type: "GET",
       contentType: "application/json; charset=utf-8",
       data: JSON.stringify(DTO),
       url: "GetAdmitsDischarges.asmx.cs/GetAandD",
       dataType: "json",
       success: function (data) {
           alert("Data: " + data.d);
           // do chart stuff here.
       },
       error: function (data) {
           alert("Error!" + data.d);
       } //end of success
   }); //end of ajax call
} //end of handleSubmitButton function

网络服务(GetAdmitsDischarges.asmx.cs):

namespace DashboardTest2010
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [ScriptService]
    public class GetAdmitsDischarges : WebService
    {
        public class AnDParms
        {
            public string startDate { get; set; }
            public string endDate { get; set; }
            public string facility { get; set; }
        }

        public class AnDReturns
        {
            public string Admits { get; set; }
            public string Discharges { get; set; }
        }

        [WebMethod]
        public string GetAandD(AnDParms parameters)
        {
           //StringBuilder results = new StringBuilder();
           AnDReturns resultsObj = new AnDReturns();
           resultsObj.Admits = "0";
           resultsObj.Discharges = "0";
           string results = "";

           string connect = (the data connection string)
           StringBuilder query = new StringBuilder();
           query.Append("Select 'Admissions' SeriesType,");
           //the rest of the query.

           using (SqlConnection conn = new SqlConnection(connect))
           {
               using (SqlCommand cmd = new SqlCommand(query.ToString(), conn))
               {
                   cmd.Parameters.AddWithValue("StartDate", parameters.startDate.ToString());
                   cmd.Parameters.AddWithValue("EndDate", parameters.endDate.ToString());
                   cmd.Parameters.AddWithValue("FacilityID", parameters.facility.ToString());

                   SqlDataReader rdr = cmd.ExecuteReader();

                   if (rdr.HasRows)
                   {
                       while (rdr.Read())
                       {
                           if (rdr["SeriesType"].ToString() == "Admissions")
                           {
                               resultsObj.Admits = rdr["SeriesCount"].ToString();
                           }
                           if (rdr["SeriesType"].ToString() == "Discharges")
                           {
                               resultsObj.Discharges = rdr["SeriesCount"].ToString();
                           }
                       }
                       results = JsonConvert.SerializeObject(resultsObj);
                   }
               }
           }
           return results;
       }
   }
}

标记只是一个简单的页面,其中包含 2 个日期字段(设置为日期选择器)、1 个下拉列表(设施)和一个提交按钮。以下是我的脚本标签,以确保我拥有所需的一切:

<script type="text/javascript" src="js/jqPlot/jquery.jqplot.js"></script>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jqPlot/jquery.jqplot.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.10.3.custom.js"></script>
<script type="text/javascript" src="js/json2.js"></script>
<script type="text/javascript" src="js/DashboardTest.js"></script>

“jquery.js”是 jqPlot 附带的 jquery。我必须支持 IE 7+(因此是 json2.js) DashboardTest.js 是上面的 javascript。

当我运行它时没有任何反应,当我单击提交按钮时没有显示任何警报。任何帮助将非常感激。我的系统管理员不允许我安装 Fiddle,如果您对此感到疑惑...

【问题讨论】:

  • 您检查浏览器工具中的 javascript 控制台和网络选项卡是否有错误?您是否检查以确保 xhr 请求符合您的预期?
  • 您是否在 Web 浏览器的 Web 开发者控制台中遇到任何错误?
  • firebug 控制台中没有错误。
  • @Jason P:我不确定您对 xhr 请求的要求是什么,这是 Firebug 中的内容吗?好的,我查了 XHR,但我不确定如何检查...
  • @BradAtCC 在 Firebug 中,有一个“Net”选项卡,单击该选项卡后,您可以单击“XHR”按钮过滤并仅显示 ajax 请求。在那里寻找您的要求。

标签: c# jquery asp.net ajax web-services


【解决方案1】:

在调用 WebService 时,使用 GetAdmitsDischarges.asmx 页面作为 URL,而不是代码隐藏 GetAdmitsDischarges.asmx.cs 页面。

还有 1 件事。您正在执行 GET 请求,默认情况下 WebServices 不允许它。您可能需要添加

<webServices>
   <protocols>
      <add name="HttpGet"/>
   </protocols>
</webServices>

到您的 web.config。

【讨论】:

  • 我得到了一个“无法识别的配置部分 webServices”。对 web.config 的补充是在某个地方吗?
  • 我将它移到最后一个 system.web 内部,这似乎解决了上述错误,但现在我收到此错误:“NetworkError: 500 Internal Server Error - localhost:52242/GetAdmitsDischarges.asmx/GetAandD? {%22startDate%22:%2208/01/2013%22,%22endDate%22:%2208/31/2013%22,%22facility%22:%22855%22}" 我更改了代码以摆脱 DTO ,然后将 AandDParms 传递给 JSON.stringify...
  • 是的,web.config 部分必须在 system.web 中。关于错误 - 您可以检查事件日志中是否存在任何与 ASP.NET 相关的错误? 500 是一个非常通用的,但事件日志可以提供更多详细信息。 Web服务还期望什么参数?您可以尝试从浏览器地址栏中将其作为直接 URL 运行吗?
  • 我浏览了日志,不知道在哪里可以找到任何有用的信息。我试图传递的参数是一个具有三个属性 startDate、endDate 和 FacilityID 的对象。我尝试在 URL 上运行它,但由于它返回并采用复杂类型,它不会让我提供值。我会尝试使用变量而不是参数类(AnDParms)...
  • 关于事件日志 - 发生 500 错误,然后在事件日志中进入 Windows 日志、应用程序日志并查找与 ASPNET 错误相关的最新黄色感叹号
猜你喜欢
  • 1970-01-01
  • 2013-05-18
  • 2011-03-16
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 2015-09-29
相关资源
最近更新 更多