martenk
Goto Top

Probleme bei einem JS

Hallo Gemeinschaft,

in diesem JS werden Daten in ein array geschrieben

nun möchte ich gerne, dass wenn 10 Einträge erreicht sind, dass dann das script abbricht - könnt ihr mir dabei bitte helfen

            function getTreatmentDates(index, isId){
                var idP = null;
                if(isId == true){
                    idP = index;
                }
                else{
                    idP = hashPatients[index - 1];
                }
                selectedTreatmentDate = "";  
                result = $.ajax({
                    type: 'POST',  
                    async: false, // Wait for result from server.
                    url: 'actions.php',  
                    data: ({
                        action: "get_treatment_dates",  
                        id_patient: idP //hashPatients[index - 1]
                    }),
                    success: function(data) {
                        //alert(data);
                    }
                }).responseText;
               ;
                var data = $.parseJSON(result);
                $("#patient-treatmentdates-select-result").empty()  
                var list = $("#patient-treatmentdates-selectable").empty();  
                var count = 0;

                for (var i in data) {
                    
                    
                    var staff = $.parseJSON(getStaffById(data[i]['id_staff']));  
                     
                    var treatment = $.parseJSON(getTreatmentById(data[i]['id_treatment']));  
                    
                    list.append('<li class="ui-widget-content" style="height: 64px;">' +   
                            data[i]['treatment_date'] + '<br /><font style="font-size: 0.87em;">bis ' +   
                            data[i]['treatment_time_end']+ " (" + treatment['shortcut'] +   
                            ") <br />"+ staff['prename'] + " " + staff['surname'] + '</font></li>');  
                    hashTreatmentDates[count++] = data[i]['id_patient_treatment'];  
                   
                }


                return result;
            }

Content-ID: 6307071238

Url: https://administrator.de/contentid/6307071238

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

darby1337
darby1337 10.03.2023 aktualisiert um 11:15:43 Uhr
Goto Top
Du könntest doch in deinem for-Loop einfach einen Counter +1 zählen lassen und wenn dieser 10 erreicht lässt du den loop abbrechen.

So zum beispiel:
(function() {
  let forCounter = 0;
    for (let i = 0; i < 50; i++) {
    if (forCounter === 10) { break; }
        
        // Rest des Codes
        console.log(i);
        forCounter++;
  }
})();
martenk
martenk 10.03.2023 um 11:07:57 Uhr
Goto Top
hi -

kannst du mir dabei helfen, dass die for schleife nicht von 0 anfängt, sondern von hinten nach vorne läuft - also vom letzten ds
darby1337
darby1337 10.03.2023 um 11:25:33 Uhr
Goto Top
Zitat von @martenk:

hi -

kannst du mir dabei helfen, dass die for schleife nicht von 0 anfängt, sondern von hinten nach vorne läuft - also vom letzten ds

Du kannst deinen for-Loop dahingehend umschreiben, sodass du anstatt von i++ einfach i-- verwendest.
Beispiel wäre so:

const datenArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];

(function () {
  let forCounter = 0;

  for (let i = datenArray.length; i >= 0; i--) {
    // Check if we reached 10
    if (forCounter === 10) break;

    // CODE
    console.log(i);

    // forCounter +1
    forCounter++;
  }
})();
martenk
martenk 10.03.2023 um 11:36:00 Uhr
Goto Top
lieben Dank für die Infos . bekomme es nur leider in meinen code nicht umgesetzt
darby1337
darby1337 10.03.2023 aktualisiert um 11:43:36 Uhr
Goto Top
Naja, wie genau deine Variable data oder result ausschaut und was du für Werte gegeben hast weiß ich nicht.

Ich könnte jetzt raten und auf gut Glück was schreiben aber das wird wohl kaum helfen.

//Edit:

Anhand der Struktur wie du aus dem data-Objekt daten ließt denk ich einfach mal du hast dort Werte als JSON-Objekt stehen oder? Wie viele Objekte hast du denn in einem result?

Wenn es mehrere sind kannst du einfach über .length gehen und daraufhin den loop schreiben. Wenn nur ein Objekt gegeben ist schreibst du einfach einen weiteren counter vor dem Loop und lässt diesen dann wie im beispiel +1 zählen und prüfst mit if, ob der Counter 10 erreicht hat
martenk
martenk 10.03.2023 aktualisiert um 11:44:07 Uhr
Goto Top
genau - wäre klasse, wenn du raten würdest

var hashPatients = new Array();
var selectedPatient = "";  

function listPatients() {
    hashPatients = new Array();
    //alert("listPatients"); 
    result = $.ajax({
        type: 'POST',  
        async: false, // Wait for result from server.
        url: 'actions.php',  
        data: ({
            action: "get_patients"  
        }),
        success: function(data) {
        }
    }).responseText;
    var list = $("#patient-selectable").empty();  
    var data = $.parseJSON(result);
    // <li class="ui-widget-content">Hans Meier</li> 
    //alert(data.length);
    var count = 0;

    for (var i in data) {
        list.append('<li class="ui-widget-content">' + data[i]['prename'] + " " + data[i]['surname'] + '</li>');  
        hashPatients[count++] = data[i]['id_patient'];  
        //alert("test: "+test[i]['surname']); 
    }
}
function removePatient() {
//                for(var i in hashPatients){
//                    alert("Hash" + i +":"+ hashPatients[i]); 
//                }
    //alert(index);
    //alert($("#patient-select-result").html()); 
    //alert(hashPatients[index]);

    //alert('"'+$("#patient-select-result").html() + '"'); 
    var elements = $("#patient-select-result").html().split('#');  
    /*if(elements.length > 1){
     alert("Es wurde mehr als 1 Patient zum Entfernen angegeben. Bitte nur genau einen Patienten zum Entfernen angeben."); 
     return;
     }*/
    var delCount = 0;

    for (var i in elements) {
        //alert(i);

        var ele = elements[i].trim();

        if (ele.length > 0 && !isNaN(ele)) {
            //alert("ele" + ele); 
            /*if (delCount > 0) {
             alert("Es wurde mehr als 1 Patient zum Entfernen angegeben. Bitte nur genau einen Patienten zum Entfernen angeben."); 
             return;
             }*/

            result = $.ajax({
                type: 'POST',  
                async: false, // Wait for result from server.
                url: 'actions.php',  
                data: ({
                    action: "remove_patient",  
                    id_patient: hashPatients[ele - 1]
                }),
                success: function(data) {
                    //alert(data);
                    listPatients();
                    updateEditPatientForm(null);


                }
            }).responseText;
            delCount++;
        }
    }
}

function getPatient(index) {
    result = $.ajax({
        type: 'POST',  
        async: false, // Wait for result from server.
        url: 'actions.php',  
        data: ({
            action: "get_patient",  
            id_patient: hashPatients[index - 1]
        }),
        success: function(data) {
            //alert(data);
        }
    }).responseText;

    return result;
}

function getStaffList() {
    result = $.ajax({
        type: 'POST',  
        async: false, // Wait for result from server.
        url: 'actions.php',  
        data: ({
            action: "get_stafflist"  
        }),
        success: function(data) {
        }
    }).responseText;
    //return result;
    //alert(result);
    return $.parseJSON(result);
}

function getTreatments() {
    result = $.ajax({
        type: 'POST',  
        async: false, // Wait for result from server.
        url: 'actions.php',  
        data: ({
            action: "get_treatments"  
        }),
        success: function(data) {
        }
    }).responseText;
    //return result;
    //alert(result);
    return $.parseJSON(result);
}


function updateEditPatientForm(patient) {
                //alert("Patient-length: " + patient.length); 
                if (patient === null) {
                    $('#edit-patient-prename').val("");  
                    $('#edit-patient-surname').val("");  
                    $('#edit-patient-birthday').val("");  
                    $('#edit-patient-telephone').val("");  
                    $('#edit-patient-remark').val("");  
                    $('#edit-patient-town').val("");  
                    $('#edit-patient-zipcode').val("");  
                    $('#edit-patient-street').val("");  
                }
                else {
                    $('#edit-patient-prename').val(patient['prename']);  
                    $('#edit-patient-surname').val(patient['surname']);  
                    $('#edit-patient-birthday').val(patient['birthday']);  
                    $('#edit-patient-telephone').val(patient['telephone']);  
                    $('#edit-patient-remark').val(patient['description_text']);  
                    $('#edit-patient-town').val(patient['town']);  
                    $('#edit-patient-zipcode').val(patient['zipcode']);  
                    $('#edit-patient-street').val(patient['street']);  
                    
                }
            }
darby1337
darby1337 10.03.2023 um 11:47:34 Uhr
Goto Top
Ich würde jetzt einfach mal antesten, ob du mit einem Simplen Counter in deinem loop arbeiten kannst.

let forLoopCounter = 0;

for (const i in data) {
  if (forLoopCounter === 10) break;

  // Rest des Codes
  const staff = $.parseJSON(getStaffById(data[i]['id_staff']));  
  const treatment = $.parseJSON(getTreatmentById(data[i]['id_treatment']));  
  list.append(
    '<li class="ui-widget-content" style="height: 64px;">' +  
      data[i]['treatment_date'] +  
      '<br /><font style="font-size: 0.87em;">bis ' +  
      data[i]['treatment_time_end'] +  
      ' (' +  
      treatment['shortcut'] +  
      ') <br />' +  
      staff['prename'] +  
      ' ' +  
      staff['surname'] +  
      '</font></li>'  
  );
  hashTreatmentDates[count++] = data[i]['id_patient_treatment'];  
  forLoopCounter++;
}
martenk
martenk 10.03.2023 um 11:53:29 Uhr
Goto Top
oh - das klappt prima - wie würdest du es machen, dass die Suchergebnisse von dem letzten Wert in der DB angezeigt werden
darby1337
darby1337 10.03.2023 um 11:56:25 Uhr
Goto Top
Wie meinen? Da brauch ich etwas mehr Kontext. Stehen die Daten nicht bereits in einer Datenbank?
martenk
martenk 10.03.2023 um 11:58:08 Uhr
Goto Top
doch doch - nur bei dem jetzigen Statement - tauchen die ersten 10 Werte auf - ich benötige aber die letzten 10
darby1337
darby1337 10.03.2023 um 12:00:56 Uhr
Goto Top
Ach so ja.. der loop startet noch immer am Anfang der data Variable. Wenn schreib mal einen console.log auf die data-Variable und schick mal das Ergebnis. Dann lässt sich da sicherlich was machen.
martenk
martenk 10.03.2023 um 12:06:35 Uhr
Goto Top
weiss nicht wie das geht - sorry
darby1337
darby1337 10.03.2023 um 12:08:08 Uhr
Goto Top
Zitat von @martenk:

weiss nicht wie das geht - sorry

In deinem loop einfach console.log(data);
martenk
martenk 10.03.2023 um 12:09:54 Uhr
Goto Top
hab ich - und wo schreibt er dann die daten hin
darby1337
darby1337 10.03.2023 um 12:11:48 Uhr
Goto Top
Zitat von @martenk:

hab ich - und wo schreibt er dann die daten hin

In.. deine.. Konsole?
martenk
martenk 10.03.2023 um 12:15:04 Uhr
Goto Top
{"id_staff": "19", "id_patient": "6410", "is_present": "false", "description": "", "id_treatment": "9", "treatment_date": "10.03.2023 09:00", "treatment_time_end": "09:30", "id_patient_treatment": "286948"}
darby1337
darby1337 10.03.2023 aktualisiert um 12:19:01 Uhr
Goto Top
Gibt es in der data-Variable nur ein Objekt? Oder sind es mehrere? Wenn es nur ein Objekt ist dann kommst du nicht wirklich weiter, ohne etwas an dem Select im SQL umzuschreiben. Die Daten werden ja von einer action.php geholt.

Und die wird wohl bestimmen, ob die Daten vom Start oder Ende geholt werden.

//Edit:
Oder auch nicht, du hast ja in dem Funktionsaufruf einen Aufruf an die action.php wo du einen Index übergibts. Da könntest du bestimmt auch etwas machen mit.
martenk
martenk 10.03.2023 um 12:22:02 Uhr
Goto Top
Hi darby1337 - habe dir mal die action gesendet - magst du einmal schauen
martenk
martenk 10.03.2023 um 12:42:47 Uhr
Goto Top
Hi darby1337 - hast du Datei bekommen?
darby1337
darby1337 10.03.2023 um 12:52:24 Uhr
Goto Top
Zitat von @martenk:

Hi darby1337 - hast du Datei bekommen?

hab ich - schaue ich mir später dann an
martenk
martenk 10.03.2023 um 13:01:31 Uhr
Goto Top
super klasse - lieben dank
martenk
martenk 13.03.2023 aktualisiert um 10:31:30 Uhr
Goto Top
Hallo Gemeinschaft - hat leider nicht geklappt mit darby - könnt ihr mir vielleicht helfen bei meinem bei der Ausgabe, dass nur die letzten 10 Suchmatches angezeigt werden - im Moment bekomme ich nur die 10 ältesten Einträge angezeigt

            function getTreatmentDates(index, isId){
                var idP = null;
                if(isId == true){
                    idP = index;
                }
                else{
                    idP = hashPatients[index - 1];
                }
                selectedTreatmentDate = "";  
                result = $.ajax({
                    type: 'POST',  
                    async: false, // Wait for result from server.
                    url: 'actions.php',  
                    data: ({
                        action: "get_treatment_dates",  
                        id_patient: idP //hashPatients[index - 1]
                    }),
                    success: function(data) {
                        //alert(data);
                    }
                }).responseText;
               ;
                var data = $.parseJSON(result);
                $("#patient-treatmentdates-select-result").empty()  
                var list = $("#patient-treatmentdates-selectable").empty();  
                var count = 0;

              let forLoopCounter = 0;

for (const i in data) {
  if (forLoopCounter === 10) break;

  // Rest des Codes
  const staff = $.parseJSON(getStaffById(data[i]['id_staff']));  
  const treatment = $.parseJSON(getTreatmentById(data[i]['id_treatment']));  
  list.append(
    '<li class="ui-widget-content" style="height: 64px;">' +  
      data[i]['treatment_date'] +  
      '<br /><font style="font-size: 0.87em;">bis ' +  
      data[i]['treatment_time_end'] +  
      ' (' +  
      treatment['shortcut'] +  
      ') <br />' +  
      staff['prename'] +  
      ' ' +  
      staff['surname'] +  
      '</font></li>'  
  );
  console.log(data);
  hashTreatmentDates[count++] = data[i]['id_patient_treatment'];  
  forLoopCounter++;
}


                return result;
            }

function getTreatmentDatesAction($id_patient){
    Core::connectDB();
    $treatmentDates = Core::getTreatmentDates($id_patient);
    echo json_encode($treatmentDates);
    Core::closeDB();
    exit;
}
6247018886
6247018886 14.03.2023 aktualisiert um 10:25:14 Uhr
Goto Top
Ein Array aus Objekten welches man anhand von einer Property der Objekte mit einem Datum sortieren möchte geht so
// initialize array
let data = [];

// add some sample objects to array
data.push({
"treatment_date": "10.03.2023 09:00",  
"id":1  
});
data.push({
"treatment_date": "09.12.2023 09:00",  
"id":2  
});
data.push({
"treatment_date": "09.12.2023 08:00",  
"id":3  
});

// sort array by 'treatment_date' property of array objects 
let data_sorted = data.sort((a,b) => {
   var d1 = new Date(a.treatment_date.replace(/(\d{2})\.(\d{2})\.(\d{4}) (\d{2}:\d{2})/,'$3-$2-$1T$4'));  
   var d2 = new Date(b.treatment_date.replace(/(\d{2})\.(\d{2})\.(\d{4}) (\d{2}:\d{2})/,'$3-$2-$1T$4'));  
   if (d1 < d2){return -1}
   if (d1 > d2){return 1}
   return 0;
});

// reverse sort oder newest > oldest
data_sorted.reverse();

// output the latest 3 entries from sorted data to console
for(var i = 0;i < 3;i++){
   console.log(data_sorted[i].treatment_date);
}
Online Demo

Damit sollte nun auch ein Laie selbst klarkommen ohne das man alles vorbeten muss.

Cheers and ciao briggs