Wykorzystywanie sesji oraz przekierowań do wyświetlania komunikatów

0

Hej,

Mam pewien formularz, który wysyłam ajaxem w celu jego walidacji oraz wysłania do bazy danych. Po zapisaniu formularza (powiedzmy, że użytkownik utworzył jakieś zamówienie) wypadałoby wyświetlić ładny komunikat oraz przekierować usera do tego nowo utworzonego rekordu (czyli tutaj: na podstronę edycji zamówienia), aby mógł sobie dalej szperać.

Zatrzymałem się na etapie wynajdowania prawidłowego (tj. prawilnego oraz ładnego) sposobu poinformowania oraz przekierowania użytkownika.

Question incoming

Czy wrzucanie komunikatu do sesji i zwracanie docelowego URLa, aby po stronie użytkownika przez JSa wykonać location.href jest, hm, ładne? Czy jest prawilne wystarczająco? Czy może raczej zahacza o ajax smell?

Przekładając mój tok myślenia na luźne PHP:

<?php

// zapisywanie formularza
// (...)

Session::addMessage('Coś tam coś tam, zamówienie utworzone.');

return Json::encode([
	'url' => route('order.edit', $order->id),
]);

I po stronie JSa, jak wspomniałem, zwykłe:

location.href = msg.url;

Aplikacja nie jest RESTowa, więc teoretycznie moje podejście (wykorzystywanie stanowości) wydawałoby się słuszne - co o tym myślicie/jak Wy byście to rozwiązali?

PS zamówienie zostało podane jako przykład, dlatego nie sugerujcie się tym za bardzo.

PPS wątek wrzuciłem do generalnego webmastering, ponieważ sam problem dotyczy dowolnego języka server side, nie specyficznie PHP (choć akurat w moim przypadku mowa będzie o pehapie).

0

Ja bym to zrobił tak

  1. utworzenie rekordu
  2. sprawdzenie czy request jest ajaxowy czy nie
  3. w zaleznosci od typu zwrocenie odpowiedniego komunikatu w formie obiektu - no chyba ze jakos czystym html/em plujesz
  4. w przypadku jak odbierasz dane js'em to daj "{"status":"ok", "objectData":"TuTwojNOwyObiektlubTylkoWymaganeDaneNpID", "ObjectLink":"tuUrl"}, jeśli przy dodawaniu były błędy to status "error"... itd itp. To już od Ciebie zależy w jakie konkretne struktury to upakujesz.
  5. W jsie rób dalej co tylko zechcesz.

W przypadku pkt 4 - pamiętaj o zwrocie "encje na twarz" i konsekwencjach jakie to niesie za sobą.

Odnośnie pytań-
moim zdaniem wrzucanie samego linku do elementu jest zbyt małą porcją informacji, można dać więcej i informować usera "Twój post o temacie "DupaJasiu" został dodany"....
Natomiast caly mechanizm o którym piszesz jest stosowany we frameworkach pod hasłem flashMessages/Messenger

0

Sprawy błędów mam załatwione (http 422 itd.), więc zależy mi jedynie na rozwiązaniu problemu z tym, co zrobić po udanym zapisie.
(jeśli wystąpi błąd, strona nie jest przeładowywana, tylko odświeżam formularz o odpowiednie komunikaty, zatem nie ma w żadnym momencie potrzeby przesyłania całej encji do widoku.)

Czyli sugerowałbyś zwracanie urla jako takie rozwiązanie najbardziej zgodne ze sztuką?

moim zdaniem wrzucanie samego linku do elementu jest zbyt małą porcją informacji, można dać więcej i informować usera

Chcę właśnie poinformować - tylko nie wiem czy lepiej jest wykorzystać sesję, aby przez tę chwilę przetrzymała wiadomość, czy też jak do tego inaczej podejść?

Natomiast caly mechanizm o którym piszesz jest stosowany we frameworkach pod hasłem flashMessages/Messenger

Wiem, wiem, korzystam na bieżąco z tego :-)

0

A ja bym zapytał tak: skoro i tak musisz zrobić przekierowanie, to dlaczego używać AJAXa? W ten sposób wykonujesz o jedno żądanie więcej. Chyba, że jest to jakiś ogólny standard w Twojej aplikacji, to wtedy przyjąłbym, że jest to chyba jedno z bardziej eleganckich rozwiązań.

[Adam]

0

Wykorzystuję ajax, ponieważ formularz jest dosyć skomplikowany, z dynamicznymi elementami, i zbędnie ciężko byłoby bawić się w jego odtwarzanie z danych.

Plus tak - jest to w mojej aplikacji już konwencja.

0
  1. Komunikat w sesji i zaraz po przekierowaniu i wyświetleniu cleara w sesji dla tego komunikatu.

2.Możesz ewentualnie dokleić parametr do url-a w stylu url/succes=1 i tam już w kontrolerze/widoku po redirekcie obsłużyć komunikat dla tego parametru. Może mało elegancka opcja ale przynajmniej nie trzymasz komunikatu w sesji.

3.Inna opcja to po poprawnym zapisie czyścisz zawartość forma (jakiś fadeOut), dajesz komunikat (id produktu czy co tam potrzebujesz ze zwrotki ajax-owej), plus link do nowo dodanego produktu w stylu "Przejdź do..." ale to się sprawdza przeważnie jak jest formularz w okienku modalnym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1