2016-12-25 2 views
0

У меня есть этот АЯКС код на Default.aspx:ASP.NET: ASPX против ASMX WebMethods обрабатывать 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()); 
    } 
}); 

Когда я прохожу URL службы веб в качестве параметра, все работает отлично. Когда я передаю URL-адрес aspx-страницы, ничего не происходит. Тела методов идентичны в файлах .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 Service (который работает, как я хочу):

    <Company xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"> 
     
        <ID>2</ID> 
     
        <Name>Microsoft</Name> 
     
        <INN>994542214</INN> 
     
    </Company>

  2. XML + Веб-страница возвращает всю страницу (от! DOCTYPE до/html).

  3. JSON + Веб-страница возвращает objest:

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

Спасибо.

ответ

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); 
+0

У меня есть этот атрибут, но он не работает. Возможно ли, что проблема заключается в том, что я пытаюсь достичь той же страницы, на которой расположен код на стороне клиента? –

+0

Нет, это не проблема. Не могли бы вы рассказать код на стороне сервера? –

+0

Я добавил его к вопросу. –

Смежные вопросы