2016-07-12 2 views
2

SQL 서버에서 데이터를 읽으려고 시도하고이 웹 페이지에서 [WebMethod]를 사용하여이 tutorial을 표시하려고합니다. 나는 데이터와 논리를 사용하고있다.AJAX 호출을위한 공백 출력

목표 - 버튼을 클릭 할 때 ProductName에 기반한 인시던트 수를 표시합니다.

<form id="form1" runat="server"> 
     <div> 
      <script> 
       $("#myButton").on("click", function (e) { 
        e.preventDefault(); 
        var aData = []; 
        aData[0] = $("#ddlSelectProductName").val(); 
        $("#contentHolder").empty(); 
        var jsonData = JSON.stringify({ aData: aData }); 
        $.ajax({ 
         type: "POST", 
         //getCountOfIncidents is my webmethod 
         url: "WebService.asmx/getCountOfIncidents", 
         data: jsonData, 
         contentType: "application/json; charset=utf-8", 
         dataType: "json", // dataType is json format 
         success: OnSuccess, 
         error: OnErrorCall 
        }); 

        function OnSuccess(response) { 
         var items = response.d; 
         var fragment = "<ul>" 
         $.each(items, function (index, val) { 

          var incidentProductName = val.incidentProductName; 
          var incidentCount = val.incidentCount; 
          var incidentProductSearch = val.incidentProductSearch; 
          fragment += "<li> " + incidentProductName + " :: " + incidentCount + " - " + incidentProductSearch + "</li>"; 
         }); 
         $("#contentHolder").append(fragment); 
        } 
        function OnErrorCall(response) { console.log(error); } 
       }); 
      </script> 
      <select id="ddlSelectProductName"> 
       <option>ORACLE</option> 
       <option>TERADATA</option> 
      </select> 
      <button id="myButton">Get List</button> 
      <div id="contentHolder"></div> 
     </div> 
    </form> 

SQL의 PROC

CREATE PROCEDURE spGetIncidents(
@ProductSearch varchar(20) 
) 
AS 
BEGIN 
select [Incident Product Name],count([Incident Product Name]) as count from incidents where [Incident Product Name][email protected] group by [Incident Product Name]; 
END 

코드가 실행되지만

WebService.cs

public class Incidents 
    { 
     public string incidentProductName; 
     public string incidentCount; 
     public string incidentProductSearch; 
    } 

    [WebMethod] 
    public List<Incidents> getCountOfIncidents(List<string> aData) 
    { 
     SqlDataReader dr; 
     List<Incidents> incidentList = new List<Incidents>(); 
     string conn = "Data Source = (LocalDb)\\MSSQLLocalDB; Initial Catalog = test; Integrated Security = True"; 
     using (SqlConnection con = new SqlConnection(conn)) 
     { 
      using (SqlCommand cmd = new SqlCommand()) 
      { 
       cmd.CommandText = "spGetIncidents"; 
       cmd.CommandType = System.Data.CommandType.StoredProcedure; 
       cmd.Connection = con; 
       cmd.Parameters.AddWithValue("@ProductSearch", aData[0]); 
       con.Open(); 
       dr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); 
       if (dr.HasRows) 
       { 
        while (dr.Read()) 
        { 
         string incidentproductname = dr["incidentProductName"].ToString(); 
         string incidentcount = dr["incidentCount"].ToString(); 
         string ProductSearch = dr["incidentProductSearch"].ToString(); 

         incidentList.Add(new Incidents 
         { 
          incidentProductName = incidentproductname, 
          incidentCount = incidentcount, 
          incidentProductSearch = ProductSearch 

         }); 

        } 

       } 
       return incidentList; 
      } 
     } 
    } 

을 Default.aspx 버튼을 클릭하면 출력이 표시되지 않습니다. 리스트 가져 오기. 콘솔에서도 확인했는데 오류가 없습니다.

디버깅 방법이나 문제 접근 방법을 잘 모르겠습니다.

편집 - 2015 년

  • 닷넷 4.5를 사용하고 Visual Studio를 사용

    • - 내 WEBMETHOD 0 히트 내가 중단 점

      기타 세부 사항을 사용하여 시도 수를 가지고있다. 이

    • 내 폴더 구조를 더 이상 사용되지 않습니다 동기화 요청을 XMLHttpRequest.WithCredentials을 던지기 때문에
    • 브라우저 동기화 선택 해제입니다
      enter image description here
  • +0

    onSuccess Method에 console.log를 넣었습니까? 그것은 어떤 것을 기록합니까? 디버깅 할 때 webMethod에 중단 점을 넣으면 incidentList가 반환됩니다. – Massanu

    +0

    예 실제 기능을 사용하기 전에'function OnSuccess (응답) { console.log (response.d)} '를 사용했습니다. 아직 출력이 없습니다. –

    +0

    @Massanu 방금 중단 점을 사용하여 시도했지만, 0 개의 적중 횟수를 보여줍니다. –

    답변

    1

    이 내가 볼 수있는 것을 보는 일 :

    1. AJAX는 괜찮아 보이지만 통화 중 옵션 목록에 cache: false을 추가합니다. 어떤 데이터도 리턴하지 못했을 수도 있고 캐쉬되어있어 더 이상 웹 메소드를 사용하지 않을 수도 있습니다.
    2. 우리가 사용하고있는 버전과 웹 사이트 프로젝트 (웹 응용 프로그램 프로젝트)에서 어떤 문제가 있는지 알지 못하기 때문에 web.config에 필요한 항목이 누락되어 AJAX 호출을 사용할 수 있습니다 . 나는 닷넷 3.5 응용 프로그램

    <system.webServer> 
        <handlers> 
         <remove name="WebServiceHandlerFactory-Integrated"/> 
         <remove name="ScriptHandlerFactory"/> 
         <remove name="ScriptHandlerFactoryAppServices"/> 
         <remove name="ScriptResource"/> 
         <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
         <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
         <add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
        </handlers> 
    </system.webServer> 
    

    그것은 AJAX 툴킷 그러나이 그것이 존재하지 않고 작동하지 않았다에 있던 프로젝트 기능과 더 많은 관계를 가지고있다 이러한 있습니다.

    관련 문제