ASP.NET:处理 AJAX 的 ASPX 与 ASMX WebMethods

Posted

技术标签:

【中文标题】ASP.NET:处理 AJAX 的 ASPX 与 ASMX WebMethods【英文标题】:ASP.NET: ASPX vs ASMX WebMethods to handle AJAX 【发布时间】: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 的结果:

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

    2 微软 994542214

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

    JSON + 网页返回一个对象:

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

谢谢。

【问题讨论】:

【参考方案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 服务时,控制台窗口中没有消息。

以上是关于ASP.NET:处理 AJAX 的 ASPX 与 ASMX WebMethods的主要内容,如果未能解决你的问题,请参考以下文章

Jquery Ajax调用aspx页面方法

两种方法实现asp.net方案的前后端数据交互(aspx文件html+ashx+ajax)

Jquery Ajax调用aspx页面方法

asp.net Ajax调用Aspx后台方法

带有 asp.net aspx 的 Ajax 返回未定义

在 index.aspx 页面插入记录后重定向到 ajax 成功函数 Asp.net Ajax