ASP.NET:ASPX与ASMX WebMethods一起处理AJAX

时间:2016-12-25 08:04:24

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

我在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网址时,没有任何反应。方法的主体在.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 +网页返回整个页面(从!DOCTYPE到/ html)。

  3. JSON +网页返回一个目标:

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

    感谢。

1 个答案:

答案 0 :(得分:0)

是的,这是可能的。 在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);