THE ORB
Uruchamiam studio

Callback NUI nigdy się nie odpala

Przycisk w menu skryptu nic nie robi po kliknięciu i zwykle w konsoli też nic się nie pojawia.

groupsPrzyciski nic nie robiącodePotrzebny programista

Zrób najpierw to

Zgłoś to sprzedawcy. Nic w twojej konfiguracji tego nie powoduje.

bug_reportWklej zamiast tego całą konsolę

Co to znaczy

Strona wysłała zapytanie do klienta i nic się nie stało. Zwykle po żadnej stronie nie ma żadnego błędu, i to właśnie jest w tym frustrujące: przycisk po prostu nic nie robi.

Co to powoduje

Uszeregowane według tego, jak często są odpowiedzią.

  1. 1

    URL nie zgadza się z nazwą zasobu

    fetch('https://my-script/buy') musi używać DOKŁADNEJ nazwy zasobu. Myślnik zamiast podkreślenia pada po cichu.

  2. 2

    Nazwa callbacku się nie zgadza

    RegisterNUICallback('buy', ...) odpowiada na .../buy, a nie na .../Buy.

  3. 3

    cb nigdy nie jest wołane

    Strona w Lua musi wywołać cb(...). Bez tego obietnica w przeglądarce nigdy się nie rozwiązuje, więc interfejs wisi, mimo że handler się wykonał.

  4. 4

    Fetch nie ma ciała POST

    NUI we FiveM oczekuje POST-a. GET albo POST bez ciała może się nie zrutować.

  5. 5

    Interfejs nie ma fokusu

    Callbacki działają bez fokusu, ale KLIKNIĘCIE, które ma je wywołać, nie dociera do strony. To SetNUIFocus(true, true) pozwala kursorowi wejść w interakcję.

Jak poznać, który jest twój

Otwórz narzędzia deweloperskie NUI i patrz na zakładkę sieci: czy żądanie w ogóle wychodzi? Jeśli nie, chodzi o stronę albo o fokus. Jeśli wychodzi i wisi, handler nie woła cb. Jeśli daje 404, nazwa jest zła.

Gdzie szukać

URL w fetchu na stronie i nazwa w RegisterNUICallback w skrypcie klienckim. Muszą się zgadzać dokładnie.

Jak to naprawić

-- client
RegisterNUICallback('buy', function(data, cb)
    -- zrób swoje
    cb({ ok = true })          -- ZAWSZE odpowiadaj, nawet przy niepowodzeniu
end)

// strona
await fetch(`https://${GetParentResourceName()}/buy`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ item: 'water' }),
})

Wciąż utknąłeś na własnym kodzie?

Ta strona mówi, co ten błąd zwykle oznacza. Wklej swoją konsolę do Server Fixera, a uszereguje wszystko, co w niej jest, i powie, co zrobić najpierw; a jeśli wolisz tego nie ruszać, ORBIE naprawi skrypt i odda ci zasób gotowy do wrzucenia.

bug_reportOtwórz Server Fixer

Dla tego rodzaju błędu Loading Screen Creator buduje NUI działające bez ręcznie pisanego HTML-a.

Błędy, które chodzą z tym w parze