GH GambleHub

Xatolarni qayta ishlash va UX tushuntirish

1) Nima uchun bu muhim?

Xato «qizil matn» emas, balki skriptning davomidir. Yaxshi UX xatolari:
  • Nima boʻlganini va bundan keyin nima qilish kerakligini tushuntiradi
  • kiritilgan ma’lumotlarni saqlaydi va taraqqiyot yo’qolishining oldini oladi,
  • xavfsiz takrorlash yoki muqobil yo’l beradi,
  • (SR/klaviatura) mavjud boʻlib qoladi va ortiqcha narsani ochmaydi.

2) Xatolar tipologiyasi (interfeys uchun)

1. Maʼlumot validatsiyasi (4xx client): boʻsh/notoʻgʻri maydonlar, format, uzunlik, qoidalar toʻqnashuvi.
2. Biznes-qoidalar: limitlar, geo-cheklovlar, KYC/KYB, dubli, mavjud bo’lmagan slotlar.
3. Huquq/permissiyalar: roli, resursdan foydalanish, yosh chegaralari.
4. Tarmoq/server: taymaut, oflayn, 5xx, ortiqcha yuklash, rate limit.
5. Nizolar/holat: 409/412 (maʼlumotlar oʻzgardi), poyga, blokirovka.
6. Resursning yoʻqligi: 404/410, olib tashlandi/koʻchirildi.
7. To’lov va tavakkalchilik: bank/PSP tomonidan rad etilishi, antifrod, mas’uliyatli o’yin limitlari.

3) Kanallar va aks ettirish darajasi

Kontekstda «tovushni» tanlang:
KanalQachonMisol
Maydonda inlineValidatsiya/maslahat«Kamida 8 ta belgi»
Blok/shakl ostidaQadam xatosi"Saqlash muvaffaqiyatsiz tugadi. Yana urinib koʻring"
Tost (role = status)Bloklanmaydigan hodisalar«Fayl xato bilan yuklangan, tafsilotlar quyida»
Sahifadagi bannerMuhim, lekin navigatsiyani bloklamaydi"Oflayn. Keshlangan maʼlumotlar koʻrsatildi"
Modalka (role = alertdialog)Xatarlarni blokirovka qilish"Sessiya tugadi. Yana kiring"
Xato sahifasi404/5xx, keskin pasayish«Sahifa topilmadi »/« Kechirasiz, muvaffaqiyatsiz tugadi»

Qoida: Tanqidchini tostga/hoverga yashirmang. Foydalanuvchi koʻrgan joyda xabar ham bor.

4) Xatolar nusxasi

Tuzilishi: sababi → oqibati → harakati.
Ohangda: halol, betaraf, aybsiz.
Aniqlik: maydon/shartni koʻrsating, kodlar va oynalardan qoching.
Harakat tugmasi: «Takrorlash», «Xaritani oʻzgartirish», «Filtrlarni tiklash», «Chat ochish».
Sezgir maʼlumotlar: koʻrsatilmasin (PAN kamuflyaj, shaxsiy atributlar).

Namunalar

Yaxshi: "To’lov o’tmadi: bank operatsiyani rad etdi. Boshqa usulni sinab koʻring yoki keyinroq takrorlang".
Yomon: "Xato 500. Nimadir notoʻgʻri boʻldi".
Yaxshi: "Kundalik xarajatlar limitiga erishildi. Yangi chegarani belgilang yoki ertaga urinib koʻring".
Yaxshi: "Fayl juda katta (maksimal 25 MB). Bir nechta faylni siqing yoki yuklab oling".

5) Xulq-atvor va fokus (A11y)

Xato fokus kontekstida koʻrsatiladi: fokusni birinchi xato maydoniga oʻtkazing.
Tirik mintaqalar:’role = «status»’(polite) axborot uchun,’role = «alert»’(assertive) tanqidiy mintaqalar uchun.
Koʻrinadigan’: focus-visible’, kontrast ≥ AA, rangga muqobil (ikona/matn).
Xabarni’aria-describedby’orqali bogʻlaymiz.

html
<label for = "pwd "> Password </label>
<input id="pwd" name="password" aria-describedby="pwd-err" aria-invalid="true">
<p id = "pwd-err" role = "alert"> Minimum 8 characters </p>

6) Retray, backoff va idempotentlik

Agar muvaffaqiyatga erishish ehtimoli boʻlsa, takrorlash taklif etiladi (tarmoq muvaffaqiyatsizliklari, 5xx, rate limit).
Eksponensial backoff 1-2-4-8 s, urinishlar limiti, tushunarli «Takrorlash» tugmasi.
Tanqidiy operatsiyalar (stavkalar/to’lovlar): majburiy Idempotency-Key → dublini istisno qilamiz.
Optimistik yangilanishlarning orqaga qaytishi - aniq vizual qaytish + tushuntirish.

js async function retry(fn, attempts=3){
let wait=1000; for(let i=0; i<attempts; i++){
try{ return await fn(); }catch(e){ if(i===attempts-1) throw e; await new Promise(r=>setTimeout(r,wait)); wait=2; }
}
}

7) Offlayn, taymautlar va qisman kontent

Oflayn: «Ulanish yo’q» bannerini ko’rsating, keshga kirish (read-only), sinxronlash navbati.
Taymautlar: UI taymaut (3-5 s) → «Tasdiqlashni kutmoqdamiz»... holati xavfsiz qaytarish/bekor qilish bilan.
Qisman muvaffaqiyat: biz erishganimizni saqlab qolamiz; «sinxronlanmagan».

8) Nizolar va raqobatbardoshlik

409/412: maʼlumotlar eskirgan. «Yangilash» ni taklif qilish va diffni koʻrsatish (nima oʻzgardi).
Bloklash: blokni kim va qancha vaqt ushlab turishi haqida «Kirish so’rash» tugmasi haqida ma’lumot bering.

9) UI-shablon namunalari

Sahifa banneri:
html
<div class="banner banner--error" role="alert">
<strong> Connection failed. </strong> Shows cached data.
<button class =" btn btn--ghost" id = "retry "> Retry </button>
</div>
Xato modalkasi:
html
<div role="alertdialog" aria-labelledby="err-title" aria-describedby="err-desc">
<h2 id = "err-title "> Session expired </h2>
<p id = "err-desc "> Sign in again to continue. </p>
<button class = "btn "> Sign in </button>
<button class =" btn btn--ghost"> Home </button>
</div>
React ErrorBoundary (korrelyatsiya ID bilan):
tsx function Fallback({ id, onRetry }: { id: string; onRetry: ()=>void }) {
return (
<div role="alert" className="banner banner--error">
<strong> We couldn't load the page. </strong>
<div> Try again. Код: <code>{id}</code> <button onClick={()=>navigator. clipboard. writeText (id)}> Copy </button> </div>
<button onClick = {onRetry}> Retry </button>
</div>
);
}

10) Xato tokenlari (dizayn-tizim)

json
{
"error": {
"tones": { "danger": "#", "warning": "#", "info": "#" },
"aria": { "polite": true, "assertive": true },
"timing": { "toastMs": 3500, "retryBackoffMs": [1000,2000,4000] },
"layout": { "fieldGap": 8, "bannerIcon": 20 }
}
}
CSS-presetlar:
css
.banner--error { background: var(--bg-danger); color: var(--on-danger); padding: 12px 16px; border-radius: 12px; }
.field-error { color: var(--role-danger); margin-top: 6px; font-size:.875rem; }

11) Xavfsizlik va maxfiylik

Stek-treys, ichki ID, DB yo’llarini chiqarmaymiz.
Nozik qiymatlarni (xaritalar, hujjatlar) yashirish.
Xabarlar tajovuzkorga xabar bermasligi kerak (masalan, hisob mavjud).
Qo’llab-quvvatlash uchun - tafsilotlar o’rniga korrelyatsiya ID.

Tuzilgan log (backend):
json
{"level":"error","event":"payment_fail","correlation_id":"c-8f1...","user_id":"u-","route":"/pay","psp_code":"DO_NOT_EXPOSE_TO_USER"}

12) Metrika va nazorat

Xato paytida INP va Long Tasks ulushi (xato UIni «osib qoʻymasligi» kerak).
Retry success rate, 1000 ta xato, tiklanish vaqti.
«Yordam/Chat» uchun CTR, tashlab ketilgan shakllar foizi.
Issiqlik xaritalari: ko’pincha field-errors paydo bo’ladi.

13) QA-chek-varag’i

Foydalanish imkoniyati

  • Birinchi xato maydonida fokus:’aria-describedby ’/’ aria-invalid’.
  • Tanqidiy xabarlar -’role =’alert’; kontrast ≥ AA.

Xulq-atvori

  • Ushbu shakllar xato boʻlganda yoʻqolmaydi.
  • Tushunarli’Retry’va to’g’ri backoff mavjud.
  • Oflayn/kesh ishlamoqda; bannerni ko’ramiz.

Nusxa olish

  • Sabab → Harakat; texnik jargonsiz va ayblovlarsiz.
  • Matnlar lokalizatsiya qilinadi va toʻrni buzmaydi.

Xavfsizlik

  • PII/sirlar sizib chiqmaydi; faqat xavfsiz/ID kodlarini koʻrsatamiz.
  • Idempotentlik tanqidiy operatsiyalar uchun kiritilgan.

14) iGaming xususiyatlari

Stavka:
  • UI darhol’busy’ni qayd etadi; kechiktirilganda> 3 s - «Tasdiqlashni kutmoqdamiz»....
  • fail: halol maqom («bozor yopildi», «koeffitsiyent o’zgardi») + xavfsiz’Retry’.
  • Ikki baravar stavkani istisno qilish uchun idempotent kalit.
To’lov/chiqarish:
  • «Bank/PSP nosozligi» va «server nosozligi» farqlanadi. Birinchisi uchun - «Boshqa usulni tanlang», ikkinchisi uchun - «Retry».
  • KYC/AML shaffof qadamlar; "Nima uchun kerak? ».
Mas’uliyatli o’yin va limitlar:
  • G’amxo’rlik, bosim yo’q. «Chegaraga erishilsa, tanaffus qiling yoki chegarani yangilang».
  • Chaqnashsiz/neonsiz; AAA kontrasti, SRda foydalanish imkoniyati.
Geo/litsenziya:
  • Cheklovlarni aniq tushuntiring va «Qoidalar/qoʻllab-quvvatlash bilan tanishish» ni taklif qiling.

15) Anti-patternlar

«Bir narsa noto’g’ri bo’ldi».
Xatodan keyin shaklni bekor qilish.
Tanqidiy tostni 3 soniya yashiring.
Faqat matn/ikonkasiz rang.
Bekor qilish imkonisiz cheksiz retrajlar.
Ichki kodlar/stek-treyslarni koʻrsatish.

16) Dizayn-tizimdagi hujjatlar

Компоненты: `FieldError`, `FormError`, `PageBanner`, `AlertDialog`, `ErrorBoundary`.
Tonlar/kontrast/tayming tokenlari, a11y presetalari va ARIA misollari.
Matn shablonli namunaviy ssenariylar xaritasi (validatsiya, tarmoq, huquqlar, to’lovlar).
«Do/Don’t»: muvaffaqiyatsizliklar/muvaffaqiyatlar metrikasi bilan real ekranlar.

Qisqacha xulosa

Xatolarni tushunarli va boshqariladigan qiling: inson tilida gapiring, kiritilgan ma’lumotlarni saqlang, xavfsiz takrorlash va muqobillarni taklif qiling, maxfiylikni hurmat qiling. Shunda hatto g’ayritabiiy vaziyatlar ham ishonchni saqlaydi va foydalanuvchi yo’lini to’xtatmaydi - ayniqsa, stavkalar va to’lovlarning tanqidiy stsenariylarida.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.