2016-07-12 16 views
2

SQLサーバーからデータを読み取り、このWebページの後に[WebMethod]を使用して表示しようとしています。tutorial。私は自分のデータとロジックを使用しています。AJAXコールの空白出力

目標 - ボタンをクリックすると、ProductNameに基づいてインシデントの数を表示します。コードがなく実行

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の

<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 

ボタンをクリックすると出力が表示されませんを取得してください。コンソールでもチェックしましたが、エラーはありません。

デバッグ方法や問題へのアプローチ方法がわかりません。

EDITは - 2015年

  • の.Net 4.5が使用されているのVisual Studioを使用して

    • - 私のWebMethod属性は0ヒット私はブレークポイント

      その他の詳細を使用してみましたカウントを持っています。それは

    • マイフォルダ構造を廃止されました同期要求を XMLHttpRequest.WithCredentialsを投げていたので、
    • ブラウザSyncは、チェックを外すある
      enter image description here
  • +0

    onSuccessメソッドにconsole.logを入れましたか?それは何かを記録していますか?あなたのwebmethodにブレークポイントを置くと、あなたがデバッグするときにincidentListがヒットするのを返しますか? – Massanu

    +0

    はい実際の機能を実装する前に 'function OnSuccess(response){ console.log(response.d) } 'を使用しました。まだ出力はありません。 –

    +0

    @Massanuブレークポイントを使用しようとしましたが、ヒット数は0です。 –

    答えて

    1

    2私が見ることができることを見て、物事:

    1. あなたのAJAXはうまく見えますが、私は電話のオプションリストにcache: falseを追加します。あなたはデータを返さなかった可能性があり、キャッシュされているので、あなたのwebmethodをもう打つことはありません。
    2. 使用しているバージョンがわからないため、Webサイトプロジェクト(vs Webアプリケーションプロジェクト)で問題が発生していますので、web.configに必要な項目がいくつか不足している可能性があります。 。私はそれは、AJAXツールキットで行うことがより多くを持っているが、これらは中だったプロジェクトは、それが存在しないと動作しませんでした

    <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> 
    

    .NET 3.5アプリでこれらを持っています。

    関連する問題