Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][JavaScript][PHP] Wykonanie php po załadowaniu strony
Forum PHP.pl > Forum > Przedszkole
shpaque
Witam serdecznie, kiedyś pisałem i zrozumiałem o co chodzi o wykonaniu skryptu ze zwrotem informacji jsonem... Teraz mam pytanie nieco inne: jak zaktualizowac tablice php po wykonaniu takiej rzeczy bez przeladowania strony? Jak to się w ogole robi bo nigdy tego nie robilem?

czyli krok po kroku:

  1. function readOrUnread(id) {
  2. $('#json').html('kliknięto');
  3. $.ajax({
  4. type: 'POST',
  5. url: './php/alertStatus.php',
  6. dataType: 'json',
  7. data: {'action': 'checkReadStatus', 'alert': id}
  8. }).done(function(json) {
  9. var statusOne = json.statusOne;
  10. var statusTwo = json.statusTwo;
  11. var statusThree = json.statusThree;
  12. var alerts = json.updateAlerts;
  13.  
  14. console.log(statusOne);
  15. console.log(statusTwo);
  16. console.log(statusThree);
  17. });
  18. }
  19.  
  20. ...
  21.  
  22. <tr onclick="readOrUnread('<?php echo $a['id']; ?>')">


teraz sam php

  1. header("Content-Type: application/json;charset=utf-8");
  2.  
  3. $statusOne = date('Y-m-d H:i:s').' Rozpoczęcie aktualizowania statusu powiadomienia'; // Status pierwszy
  4.  
  5. $pathToAlerts = './../db/alerts';
  6. $alertId = isset($_POST['alert']) ? $_POST['alert'] : '';
  7.  
  8. if ($_POST['action'] === 'checkReadStatus' && $alertId !== '') {
  9. $pathToAlertDataBase = $pathToAlerts.'/'.$alertId.'.xml';
  10. $loadAlertDataBase = simplexml_load_file($pathToAlertDataBase);
  11.  
  12. $statusTwo = date('Y-m-d H:i:s').' Odnaleziono powiadomienie o id: '.$alertId; // Status drugi
  13.  
  14. if ((string)$loadAlertDataBase -> read === '0') {$loadAlertDataBase -> read = 1;}
  15. else {$loadAlertDataBase -> read = 0;}
  16. $loadAlertDataBase -> asXML($pathToAlertDataBase);
  17.  
  18. // aktualizujemy tablicę alertów
  19. $listOfAlerts = glob($pathToAlerts.'/*.xml', GLOB_BRACE);
  20. foreach ($listOfAlerts as $loa) {
  21. $loaFile = simplexml_load_file($loa);
  22. $updateAlerts[] = xmlToArray($loaFile);
  23. }
  24.  
  25. $statusThree = date('Y-m-d H:i:s').' Zakończono aktualizowanie powiadomień'; // Status trzeci
  26.  
  27. $success = ['statusOne' => $statusOne, 'statusTwo' => $statusTwo, 'statusThree' => $statusThree, 'updateAlerts' => $updateAlerts];
  28. echo json_encode($success);
  29. }


ok skoro juz zwrocil nam jsonem nowa tablice, jak zrobic zeby ta tablica jakos dynamicznie zastapila poprzednia (chodzi o tablice $alerts ladowana z php aby zastapila sie tablica 'alerts' z js i najlepiej zeby bez przeladowania strony wszystkie petle ktore chodza na tablicy $array sie zaktualizowaly...)
viking
No cóż. W jquery musisz ręcznie przepisać docelowe elementy html.
shpaque
to jak to powinno byc zrobione? chodzi mi o bardzo prosta rzecz, mam w dwoch miejscach skrypty korzystajace z tablicy $alerts (a moze zamiast tablicy lepiej zeby bezposrednio czytalo z pliku xml?):
- jeden jako ikona pokazuje nieczytane alerty (licznik)
- drugi wyswietla te alerty w postaci tabeli

chodzi mi o to zeby klikajac w dany alert (nieczytany) oznaczyl sie jako czytany, a w ikonie zaladowanej wczesniej zmniejszyla sie liczba nieczytanych - i na odwrot, bo klikniecie w przeczytany alert powinno skutkowac zmiana statusu na 'nieczytany" (wartosc 0/1 w pliku xml)

* czyli jedyna opcja to json jsonem i wykonanie tego w rzeczywistosci, a jquery w tej samej funkcji aby podmienila po stronie przegladarki dane?
trueblue
Do PHP przesyłasz identyfikator przeczytanego alertu. Dodatkowo (wyłącznie w JS) zmniejszasz licznik nieprzeczytanych oraz zaznaczasz element na liście alertów jako przeczytany.
viking
$('mojelement').html($response.cos)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.