2016-10-20 1 views
5

Brauchen Sie Hilfe, um meinen Fehler zu verstehen/Daten auf der Seite anzuzeigen.ng-repeat zeigt keine Daten beim Abruf über Werksdienst an

Ich ging durch fast jede Frage im Forum sagen "ng-Wiederholung funktioniert nicht". Aber immer noch nicht in der Lage, die Antwort zu finden.

(Bitte beachten Sie: Zum ersten Mal habe ich versucht, Daten mit $ http durch die Schaffung von Fabrik-Service zu holen) an meinem unten JavaScript-Code (Modul, Controller und Fabrik an einer Stelle definiert)

Bitte werfen Sie einen Blick

//App declaration 
    var myApp = angular.module("appLeadsLogRpt", []); 

    //Controller declaration 
    myApp.controller('controllerLeadsLogRpt', ['dataService', fncontrollerLeadsLogRpt]); 

    function fncontrollerLeadsLogRpt(dataService) { 
     var vm = this; 

     //Table headers 
     vm.TableHeaders = ["Lead Id", "Source", "Create Date", "Status", "Contact Id", "Customer Name", "AssignedTo", "Mail Content", "Closed Reason", "Last Lead Note"];    

     dataService.getAllData() 
      .then(getData,null) 
      .catch(showError); 

     function getData(data) { 
      vm.LeadsLogRptData = JSON.parse(data); 
      //console.log(JSON.parse(data)); 
     } 
     function showError(errMsg) { 
      console.log(errMsg); 
     } 
    } 

    //Factory Service to fetch data 
    myApp.factory('dataService', ['$http', DataService]); 

    function DataService($http) {    
     return { 
      getAllData: GetAllData 
     }; 

     function GetAllData() {     
      return $http({ 
       method: 'get', 
       url: 'DataHandler.ashx?method=leadsReport&listId=504473' 
      }) 
      .then(sendResponseData) 
      .catch(sendError) 
     } 

     function sendResponseData(response) {     
      return response.data; 
     } 
     function sendError(response) { 
      return response.status; 
     } 
    } 

</script> 

Und meine Html wie unten:

<div id="DvContent" style="width:100%" data-ng-app="appLeadsLogRpt"> 
    <div style="width:100%;" data-ng-controller="controllerLeadsLogRpt as vm1"> 
     <input type="text" id="txtJsonData" value='<%=jsonLeadsLogRpt %>' style="display:none" /> 

     <div><h3>Leads Log Report</h3></div> 
     <div style="text-align:right;margin-bottom:2px;padding-right:2px;"> 
      <a href="javascript:void(0);" data-ng-click="ExportToExcel();"><img src="/mp_images/excelicon.gif" border=0 width=22 height=22 alt="Open in Excel"></a>      
     </div> 
     <div id="divExportToExcel"> 
      <table style="width:100%" id="tblLeadLogRpt" class="table table-bordered"> 
       <thead> 
        <tr style="background-color:#CCCCCC"> 
         <th data-ng-repeat="item in vm1.TableHeaders" class="ng-cloack">{{item}}</th> 
        </tr> 
       </thead> 
       <tbody>       
        <tr data-ng-repeat="item1 in vm1.LeadsLogRptData"> 
         <td class="ng-cloack">{{item1.A_LeadId}}</td>       
         <td class="ng-cloack">{{item1.B_Source}}</td>       
         <td colspan="8"></td>       
        </tr> 
        <tr data-ng-if="LeadsLogRptData.length==0"><td colspan="10">Data Not Found</td></tr>       
       </tbody> 
      </table> 
     </div> 
    </div> 
</div> 

Wenn ich fest codierte Daten gebe, die vom Server zu ng-repeat zurückgegeben werden, funktioniert es einwandfrei

Bitte lassen Sie mich wissen, was ich falsch mache.

Noch eine Frage.

In Fabrik holt I-Daten von get-Methode von $ http Aufruf

Wenn ich es durch Post-Methode aufgerufen werden soll, wie gehe ich params?

In Jquery, mache ich es folgenden Weg.

$.ajax({ 
     url: 'AbcdHandler.ashx', 
     type: 'POST', 
    data: { 
      'method': 'ABCData', 
      'StartDate': startDate, 
      'EndDate': endDate 
    }, 
    success: function (result) { 
      return JSON.parse(result); 
    }, 
    error: OnError 
}); 

Vielen Dank im Voraus für das Lesen und Helfen.

Meine letzte Beobachtung:

, wenn ich Daten auf der Konsole zu schreiben, bekam dies. (siehe Funktion getData (data))

[{"A_LeadId": "426429", "B_Source": "LabX"}, {"A_LeadId": "429369", "B_Source": "LabX" }, {"A_LeadId": "430586", "B_Source": "Info"}, {"A_LeadId": "430589", "B_Quelle": "Info"}, {"A_LeadId": "433848", "B_Source" : "LabX"}, {"A_LeadId": "448592", "B_Source": "Info"}, {"A_LeadId": "451795", "B_Source": "Gebot"}, {"A_LeadId": "453008" , "B_Source": "Niedriges Gebot"}, {"A_LeadId": "453009", "B_Source": "Niedriges Gebot"}, {"A_LeadId": "453010", "B_Source": "Niedriges Gebot"}, { "A_LeadId": "455736", "B_Source": "Info"}, {"A_LeadId": "455743", "B_Quelle": "Info"}, {"A_LeadId": "457030", "B_Quelle": "Info "}, {" A_LeadId ":" 457052 "," B_Source ":" LabX "}, {" A_LeadId ":" 461503 "," B_Source ":" Manuell eingegeben "}]

Wenn ich das kopiere und direkt Zu vm.LeadsLogRptData zuweisen, System zeigt mir die Ausgabe auf dem Bildschirm pro perlig. z.B. vm.LeadsLogRptData = [{"A_LeadId": "426429", "B_Source": "LabX"}, ......];

Eine weitere Sache. Wenn ich Länge der Daten zu überprüfen, zeigt es mir 621. ({{vm.LeadsLogRptData.length}})

Eigentlich gibt es nur 15 geschweiften Klammern Paar ({}) und System sollte mir zeigen Länge als 15

Ich hoffe, ich erkläre mein Problem richtig.

(etwas benötigen, die richtig meine Daten umwandelt im JSON-Format)

Danke,

Ich habe antworten

Nur eval mit JSON.parse und Startsystem Anzeigen von Daten richtig z vm.LeadsLogRptData = eval (JSON.parse (Daten));

Wer bitte erklären Sie mir die Logik dahinter?

Danke an alle, die bisher gelesen und geantwortet haben.

+0

Sie sind nicht sehr klar, was Sie mit "Wenn ich hart codierte Daten vom Server zurückgeben zuweisen". Und was bekommen Sie in dieser Konsolenanweisung 'console.log (JSON.parse (data));'? – Sajan

+0

Sajan, Bitte beachten Sie den Abschnitt "Meine letzte Beobachtung". Hoffnung, die dir hilft, mein Problem zu verstehen. Danke – user3172224

Antwort

0

Vielleicht sollten Sie params Eigenschaft $ http-Objekt verwenden, wie:

function GetAllData() {     
      return $http({ 
       method: 'GET', 
       url: 'http://localhost:12345/DataHandler.ashx', 
       params: {method: "leadsReport", listId: 504473} 
      }) 
      .then(sendResponseData) 
      .catch(sendError) 
     } 

Wenn Sie POST-Anfrage durchführen möchten, sollten Sie es wie folgt verwenden:

function PostData() {     
      return $http({ 
       method: 'POST', 
       url: 'http://localhost:12345/DataHandler.ashx', 
       data: {exampleData: exampleData} 
      }) 
      .then(sendResponseData) 
      .catch(sendError) 
     } 

Denken Sie daran, http://localhost:12345/ sich ändern für Ihre Server-URL.

+0

Kacper, Danke für die Hilfe. Aber wenn ich meine Formularfelder posten möchte, wie gebe ich sie weiter? Wenn ich zwei Eingabefelder und einen Radiobutton-Wert übergeben möchte, wie komprimiere ich sie alle in "exampleData"? Außerdem muss ich sie auf der Handlerseite abrufen können, indem ich Request-Objekt verwende. Freundliche Anleitung. – user3172224

+0

Zum Beispiel, wenn Sie Ihr Ansichtsmodell-Objekt wie '$ scope.user' mit Feldern wie' $ scope.user.name', '$ scope.user.surname' haben und es an ** $ http übergeben wollen ** Data-Eigenschaft können Sie einfach 'data: {exampleData: $ scope.user}', oder 'data: {exampleData1: $ scope.user.name, exampleData2: $ scope.user.surname}' –

+0

Kacper danke für die Erklärung. Der Code sieht fast genauso aus wie ich ihn bisher in JQuery verwendet habe, außer dass der Name des Paramtes kein einfaches Anführungszeichen (') erfordert. Werde versuchen dies und wenn Sie irgendein Problem haben, fragen Sie Ihre Hilfe erneut. Danke – user3172224