THE ORB
Démarrage du studio

Un callback NUI ne se déclenche jamais

Un bouton du menu d'un script ne fait rien quand on clique, et en général rien n'apparaît dans la console non plus.

groupsLes boutons ne font riencodeIl faut un développeur

Faites d'abord ceci

Signalez-le au vendeur. Rien dans votre installation ne cause cela.

bug_reportCollez plutôt toute votre console

Ce que ça veut dire

Le côté navigateur a posté vers le client et rien ne s'est produit. Il n'y a en général aucune erreur des deux côtés, et c'est ce qui rend la chose frustrante : le bouton ne fait simplement rien.

Ce qui la provoque

Classé par fréquence : la cause la plus probable en premier.

  1. 1

    L'URL ne correspond pas au nom de la ressource

    fetch('https://my-script/buy') doit utiliser le nom EXACT de la ressource. Un tiret contre un tiret bas échoue en silence.

  2. 2

    Le nom du callback ne correspond pas

    RegisterNUICallback('buy', ...) répond à .../buy, pas à .../Buy.

  3. 3

    cb n'est jamais appelé

    Le côté Lua doit appeler cb(...). Sans cela, la promesse du navigateur ne se résout jamais, donc l'interface se fige alors que le gestionnaire s'est exécuté.

  4. 4

    Le fetch n'a pas de corps POST

    La NUI de FiveM attend un POST. Un GET, ou un POST sans corps, peut ne pas être routé.

  5. 5

    L'interface n'a pas le focus

    Les callbacks fonctionnent sans focus, mais le CLIC censé en déclencher un n'atteint pas la page. SetNUIFocus(true, true) est ce qui permet au curseur d'interagir.

Comment savoir laquelle est la vôtre

Ouvrez les outils de développement NUI et regardez l'onglet réseau : la requête part-elle ? Si non, c'est la page ou le focus. Si elle part et reste en attente, le gestionnaire n'appelle pas cb. Si elle renvoie 404, le nom est faux.

Où regarder

L'URL du fetch dans la page, et le nom du RegisterNUICallback dans le script client. Ils doivent correspondre exactement.

Comment la corriger

-- client
RegisterNUICallback('buy', function(data, cb)
    -- faire la chose
    cb({ ok = true })          -- répondez TOUJOURS, même en cas d'échec
end)

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

Toujours bloqué sur votre propre code ?

Cette page explique ce que cette erreur signifie en général. Collez votre console dans Server Fixer : il classera tout ce qui s'y trouve et vous dira quoi faire en premier ; et si vous préférez ne pas y toucher, ORBIE peut réparer le script et vous rendre la ressource prête à déposer.

bug_reportOuvrir le Server Fixer

Pour ce type d'erreur, le Loading Screen Creator construit une NUI qui marche sans HTML écrit à la main.

Les erreurs qui voyagent avec celle-ci