【问题标题】:ASP.NET: ASPX vs ASMX WebMethods to handle AJAXASP.NET:处理 AJAX 的 ASPX 与 ASMX WebMethods
【发布时间】:2017-05-10 05:32:53
【问题描述】:

我在 Default.aspx 上有这个 ajax 代码:

$.ajax({
    //url: "Default.aspx/GetCompany",
    url: "WebService.asmx/GetCompany",
    type: "POST",
    data: { companyName: compName },
    dataType: "xml",
    success: function (data) {
        var jQueryXml = $(data);
        $('#txtBoxInn').val(jQueryXml.find('INN').text());
    }
});

当我将 Web 服务 url 作为参数传递时,一切正常。当我传递 aspx-page url 时,什么也没有发生。方法的主体在 .asmx 和 .aspx 文件中是相同的。

我的问题是可以使用 aspx 页面而不是 asmx 服务来使 ajax 请求可行吗?

有服务器端代码:

namespace WSS_AJAX_SQL
{
    [System.Web.Script.Services.ScriptService]
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        [WebMethod]
        public Company GetCompany(string companyName)
        {
            Company company = new Company();

            string cs = @"Data Source=Barrus-laptop\sqlexpress;Initial Catalog=WSS_Companies;Integrated Security=True";

            using (SqlConnection connection = new SqlConnection(cs))
            {
                SqlCommand command = new SqlCommand($"select * from [CompanyList] where [Name] = '{companyName}'", connection);
                command.CommandType = System.Data.CommandType.Text;

                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    company.ID = Convert.ToInt32(reader["ID"]);
                    company.Name = reader["Name"].ToString();
                    company.INN = Convert.ToInt32(reader["INN"]);
                }
            }
            return company;
        }
    }
}

console.log 的结果:

  1. XML 格式 + Web 服务(按我的意愿工作):

    2 微软 994542214

  2. XML + Web Page 返回整个页面(从 !DOCTYPE 到 /html)。

  3. JSON + 网页返回一个对象:

Object d: 
  ObjectID: 2
    INN: 994542214
    Name: "Microsoft"
    __type: "WSS_AJAX_SQL.Company"
    __proto__: Object
  __proto__: Object

谢谢。

【问题讨论】:

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


    【解决方案1】:

    是的,这是可能的。 在您的 ASPX 页面中,声明一个 [webmethod]:

    public partial class Pagename: System.Web.UI.Page
    {
        [WebMethod]
        public static Company GetCompany(string companyName)
        {
            ......
        }
        ...
    }
    

    请更改:

    dataType: "xml",
    

    到:

    dataType: "json",
    

    请更改:

    data: { companyName: compName },
    

    到:

    JSON.stringify({ companyName: compName }),
    

    请注意 [WebMethod] 方法需要声明为static

    在你的AJAX成功方法中,请更改:

    $('#txtBoxInn').val(jQueryXml.find('INN').text());
    

    到:

    $('#txtBoxInn').val(data.d.INN);
    

    【讨论】:

    • 我有这个属性,但它不起作用。问题是否可能是我尝试访问客户端代码所在的同一页面?
    • 不,这不是问题所在。你能分享一下服务器端代码吗?
    • 我将它添加到问题中。
    • 请将方法设为静态。如果这没有帮助,您能否检查 Chrome 或 IE (F12) 中的开发工具以查看是否出现任何错误?
    • Chrome 什么也没给出,IE 报告错误 XML5645('未声明指定的实体')。当我通过 Web 服务时,控制台窗口中没有消息。
    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2013-10-09
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多