jQuery mosligi
amoCRM uslubidagi vidjetlar define(['jquery'], function ($) { ... }) ko'rinishida yoziladi. Bito bu bog'liqlikni haqiqiy jQuery 4 ga hal qiladi — admin panel bilan birga keladigan to'liq (slim emas) build. Unda atigi bir necha metod almashtirilgan; qolgan hamma narsa — DOM, hodisalar (nomlar fazosi bilan), effektlar, $.fn plaginlari, $.Deferred — oddiy jQuery 4 kabi ishlaydi.
U faqat modulingizning 'jquery' (yoki '$') bog'liqligi sifatida, hamda settings qayta chaqiruvidagi $modal sifatida yetib keladi. Bito uni window.$ yoki window.jQueryga ulamaydi va admin panelning o'zi jQuery ishlatmaydi — global o'zgaruvchi kutayotgan uchinchi tomon skriptingiz uni topa olmaydi. Sahifadagi barcha vidjetlar bitta $ nusxasini bo'lishadi: $.fnga qo'shgan plaginingiz boshqa vidjetlarga ham ko'rinadi, shuning uchun nomlarni noyob qiling.
Nima almashtirilgan
| Metod | Nima bo'ladi |
|---|---|
$.ajax, $.get, $.post | Admin panelning HTTP klienti orqali ketadi — qarang pastda. |
$.trim | jQuery 4 da olib tashlangan, qaytarilgan: String(value ?? '').trim(). |
$.isArray | jQuery 4 da olib tashlangan, qaytarilgan: Array.isArray. |
$.isFunction | jQuery 4 da olib tashlangan, qaytarilgan: typeof value === 'function'. |
$.parseJSON | jQuery 4 da olib tashlangan, qaytarilgan: aynan JSON.parse — bo'sh satr xato tashlaydi. |
Faqat shu yettitasi. jQuery 4 olib tashlagan boshqa yordamchilar — masalan $.type, $.now, $.isNumeric, $.isWindow, $.camelCase, .andSelf(), .size() — qaytarilmagan: ularni chaqiradigan eski kodni nativ ekvivalentga almashtiring.
$.ajax ilovaning HTTP klienti orqali ketadi
$.ajax, $.get va $.post jQuery'ning XHR'i emas, admin panel ishlatadigan o'sha HTTP klient ustida ishlaydi. Shuning uchun so'rov kirgan foydalanuvchining avtorizatsiyasini, tilini, vaqt zonasini va idempotentlik kalitini oladi — vidjetga o'z kalitlari kerak emas. Bundan kelib chiqadi:
- HTTP metodi yig'iladi. Faqat
GETGETbo'lib qoladi; boshqa har qandaytype/method, jumladanPUT,DELETEvaPATCH,POSTbo'lib yuboriladi — o'qish uchun ham POST ishlatadigan admin API'ga mos ravishda. - URL berilganidek olinadi.
bito.ajaxdan farqli o'laroq, prefiksni siz uchun hech kim qo'shmaydi. - Qo'llab-quvvatlanadigan parametrlar:
url,type/method,data,headers,timeout,success,error,complete.dataTypeva boshqa jQuery sozlamalari e'tiborga olinmaydi,$.ajaxSetupstandartlari ham qo'llanmaydi. - Javob konverti ochiladi.
successvadoneBito javobiningdataqismini oladi, butun{ code, data, ... }konvertni emas. - Bu uch metod ustiga qurilgan jQuery yordamchilari (
$.getJSON,.load()) ham shu yo'ldan ketadi.dataTypee'tiborga olinmagani uchun$.getScriptskriptni bajarmaydi.
Qaytadigan qiymat — jQuery Deferred promise'i (done/fail/always/then), unga jqXHR ko'rinishidagi maydonlar qo'shilgan:
| Maydon | Qiymat |
|---|---|
status | Muvaffaqiyatda 200; xatoda Bito xatosidagi HTTP status; tarmoq xatosida 0 |
statusText | Muvaffaqiyatda "OK", xatoda xato matni |
responseJSON | Ochilgan javob (muvaffaqiyatda) yoki Bito xato konverti (xatoda) |
responseText | Xuddi shu, JSON satr ko'rinishida |
readyState | So'rov tugaguncha 1, keyin 4 |
abort() | Hech narsa qilmaydi. So'rovni bekor qilib bo'lmaydi. |
getResponseHeader(), getAllResponseHeaders() | Doim null / "" — javob sarlavhalari berilmaydi |
success(data, 'success', jqXHR), error(jqXHR, 'error', err) va complete(jqXHR, status) jQuery tartibida chaqiriladi, done/fail esa jQuery'dagi kabi sinxron ishlaydi.
$.ajax({
url: '/back-api/admin/customer/get-paging',
data: { page: 1, limit: 20 },
success: function (data) { /* data — konvertning `data` qismi */ },
error: function (jqXHR) {
if (jqXHR.status === 403) { /* ... */ }
},
})WARNING
Admin API 401 qaytarsa, admin panel foydalanuvchini tizimdan chiqaradi — bu vidjetingiz so'rovi uchun ham amal qiladi.
Bito admin API'siga murojaat qilish uchun bito.ajax afzalroq — u prefiksni o'zi qo'shadi.