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的主要内容,如果未能解决你的问题,请参考以下文章