Skip to content

Interesting Widget code, but can't fetch API

Solved Customisation
26 2 10.9k 1
  • wrote on last edited by Panda
    #1

    I added some code to a Widget that uses an OctoAI API call to generate AI Image.
    For some reason the API fetch returns in under a second, with empty reponse.
    The same code runs outside a widget, takes a few seconds and returns the data.
    Here you can try the js code
    https://ccccc555.github.io/oc/

    Is there a fundemental reason why a fetch command cant work in a nodebb widget?

  • I added some code to a Widget that uses an OctoAI API call to generate AI Image.
    For some reason the API fetch returns in under a second, with empty reponse.
    The same code runs outside a widget, takes a few seconds and returns the data.
    Here you can try the js code
    https://ccccc555.github.io/oc/

    Is there a fundemental reason why a fetch command cant work in a nodebb widget?

    wrote on last edited by phenomlab
    #2

    @Panda can you provide the actual code here?

  • @Panda can you provide the actual code here?

    wrote on last edited by
    #3
  • wrote on last edited by
    #4

    @Panda are there any errors in the browser console?

  • @Panda are there any errors in the browser console?

    wrote on last edited by Panda
    #5

    @phenomlab
    Unfortunately cant check, as in France, on mobile.
    Ive tried a few methods to view console in mobile browser but none have ever worked!
    Maybe you can look?
    https://aignite.nodebb.com/category/10/3d
    You will see it returns much more quickly than that code normally would, but doesn’t return with error code

  • @phenomlab
    Unfortunately cant check, as in France, on mobile.
    Ive tried a few methods to view console in mobile browser but none have ever worked!
    Maybe you can look?
    https://aignite.nodebb.com/category/10/3d
    You will see it returns much more quickly than that code normally would, but doesn’t return with error code

    wrote on last edited by
    #6

    @Panda looking at the code, it fires an alert prompt asking for a parameter to be entered. This script requires interaction, so that it why it returns immediately with nothing.

    The widget is executing the script, but without a response, it returns null.

  • @Panda looking at the code, it fires an alert prompt asking for a parameter to be entered. This script requires interaction, so that it why it returns immediately with nothing.

    The widget is executing the script, but without a response, it returns null.

    wrote on last edited by Panda
    #7

    @phenomlab
    Dont think its any problem with that flow, because the prompt comes first

    var promp holds the entered string, and thats used in the octo() function which calls the API
    It works as stand alone code

    Are you saying the prompt command wont stop the code flow like it would outside of a widget?

  • @phenomlab
    Dont think its any problem with that flow, because the prompt comes first

    var promp holds the entered string, and thats used in the octo() function which calls the API
    It works as stand alone code

    Are you saying the prompt command wont stop the code flow like it would outside of a widget?

    wrote on last edited by
    #8

    @Panda said in Interesting Widget code, but can’t fetch API:

    Dont think its any problem with that flow, because the prompt comes first

    That’s correct, but the prompt is interactive in the sense that it waits for user input.

    fetch('https://stable-diffusion-demo-8yn9n69web73.octoai.cloud/predict', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${apiKey}`
      },
      body: JSON.stringify({
        'prompt': promp,
      // 'num_inference_steps': '30',
        'sheduler': 'DPMSolverMultistep'
      })
    })
    

    As you can see from above, the original promp value is passed to the JSON function. As that value is never entered, the value is returned NULL.

  • @Panda said in Interesting Widget code, but can’t fetch API:

    Dont think its any problem with that flow, because the prompt comes first

    That’s correct, but the prompt is interactive in the sense that it waits for user input.

    fetch('https://stable-diffusion-demo-8yn9n69web73.octoai.cloud/predict', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${apiKey}`
      },
      body: JSON.stringify({
        'prompt': promp,
      // 'num_inference_steps': '30',
        'sheduler': 'DPMSolverMultistep'
      })
    })
    

    As you can see from above, the original promp value is passed to the JSON function. As that value is never entered, the value is returned NULL.

    wrote on last edited by Panda
    #9

    @phenomlab
    There may be some confusion here as descriptions to AI art generators are called prompts. So that ‘prompt’ value in Json body is set to my variable promp.

    promp is set by a JS prompt command at the bottom of the code. Its a global variable so available to the octo() function when called.

    Function octo() has the API fetch, comes after the prompt is entered

    Screenshot_20230625_011227_Chrome~2.jpg

  • @phenomlab
    There may be some confusion here as descriptions to AI art generators are called prompts. So that ‘prompt’ value in Json body is set to my variable promp.

    promp is set by a JS prompt command at the bottom of the code. Its a global variable so available to the octo() function when called.

    Function octo() has the API fetch, comes after the prompt is entered

    Screenshot_20230625_011227_Chrome~2.jpg

    wrote on last edited by phenomlab
    #10

    @Panda yes, but if you run the code directly in the browser a popup prompt asks for a value and won’t proceed until one is provided.

  • @Panda yes, but if you run the code directly in the browser a popup prompt asks for a value and won’t proceed until one is provided.

    wrote on last edited by Panda
    #11

    @phenomlab yes exactly, and why would it be any different in a widget?
    The JS prompt command is async so will halt the flow till value is entered?

  • @phenomlab yes exactly, and why would it be any different in a widget?
    The JS prompt command is async so will halt the flow till value is entered?

    wrote on last edited by
    #12

    @Panda it’s not. If I visit the page you sent me, the popup appears, but no image is returned. This is why I need the console error as there will be one.

  • @Panda it’s not. If I visit the page you sent me, the popup appears, but no image is returned. This is why I need the console error as there will be one.

    wrote on last edited by
    #13

    @phenomlab ah you mean the nodebb console log, not browser inspect console?
    Its nodebb hosted, can you view if you login?

  • @phenomlab ah you mean the nodebb console log, not browser inspect console?
    Its nodebb hosted, can you view if you login?

    wrote on last edited by
    #14

    @Panda no, the browser console. There is likely a JS error there I need to see.

  • @Panda no, the browser console. There is likely a JS error there I need to see.

    wrote on last edited by
    #15

    @phenomlab
    I sent link to the aignite.nodebb.com forum above, its on 3d category
    Incidentally a blank prompt string will still generate a random image, so the problems not with the input

  • @phenomlab
    I sent link to the aignite.nodebb.com forum above, its on 3d category
    Incidentally a blank prompt string will still generate a random image, so the problems not with the input

    wrote on last edited by
    #16

    @Panda yes, but you are missing the point here. I need to see the output of the browser console or at least insert something like the below to return it

    alert(console.log)

    It’s 1:17am here and I’m not in front of a PC, but will check tomorrow.

  • @Panda yes, but you are missing the point here. I need to see the output of the browser console or at least insert something like the below to return it

    alert(console.log)

    It’s 1:17am here and I’m not in front of a PC, but will check tomorrow.

    wrote on last edited by
    #17

    To eliminate any confusion I made a simpler widget which just does hardcoded API call for image of a cat. No user input etc
    Again it runs stand alone, but returns quickly, empty, as a widget
    This example sits on aignite.nodebb.com category 8 (‘Diamond’)
    First example is still in category 10 (‘3d’)

  • To eliminate any confusion I made a simpler widget which just does hardcoded API call for image of a cat. No user input etc
    Again it runs stand alone, but returns quickly, empty, as a widget
    This example sits on aignite.nodebb.com category 8 (‘Diamond’)
    First example is still in category 10 (‘3d’)

    wrote on last edited by phenomlab
    #18

    @Panda the result=undefined says it all. It still returns null and we need to see the error in the browser console.

  • To eliminate any confusion I made a simpler widget which just does hardcoded API call for image of a cat. No user input etc
    Again it runs stand alone, but returns quickly, empty, as a widget
    This example sits on aignite.nodebb.com category 8 (‘Diamond’)
    First example is still in category 10 (‘3d’)

    wrote on last edited by phenomlab
    #19

    @Panda Just looking at this, and it seems that the service expects authentication

    49e50e3b-9744-49ef-b524-197f00c07c0b-image.png

    I also see the below in the console

    Failed to load resource: the server responded with a status of 401 (Unauthorized)
    GET data:image/png;base64,undefined net::ERR_INVALID_URL
    {"code":401,"message":"error occurred during proxy authentication: no token in request"}
    
  • wrote on last edited by
    #20

    Yes. There is a key included and the exact code works as stand-alone, thats why Im wonderinging why not working in a widget


Did this solution help you?
Did you find the suggested solution useful? Support 💗 Sudonix with a coffee ☕
If your organisation needs deeper expertise around infrastructure, security, or technology leadership, learn more about Phenomlab Ltd. Many of the deeper technical guides behind Sudonix are published there.

Related Topics
  • Following the API docs but its not clear ...

    Solved Customisation api nodebb
    8
    2 Votes
    8 Posts
    3k Views
    phenomlab
    @Panda you’d be surprised. If you consider that you’d need to use the API to be able to populate a WordPress widget for example (which in turn would of course be PHP), taking this route is still immensely popular.
  • Unable to change icon in NodeBB navigation

    Tips navigation nodebb
    1
    7
    1 Votes
    1 Posts
    896 Views
    No one has replied
  • NodeBB: Creating pages

    Solved Configure nodebb create page
    9
    0 Votes
    9 Posts
    4k Views
    mventures
    OK, I think I have figured out how to place a link in the footer which will click to a new page.
  • Chevron up before & after

    Solved Configure nodebb
    11
    1
    4 Votes
    11 Posts
    3k Views
    cagatay
    @crazycells you are right thank you.
  • Top Ranked Forums

    Chitchat nodebb top ranked
    9
    1
    3 Votes
    9 Posts
    3k Views
    phenomlab
    The real issue here is that most people consider forums to be “dead” in the sense that nobody uses them anymore, and social media groups have taken their place. Their once dominant stance in the 90’s and early 00’s will never be experienced again, but having said that, there are a number of forums that did in fact survive the social media onslaught, and still enjoy a large user base. Forums tend to be niche. One that immediately sticks out is Reddit - despite looking like it was designed in the 80s, it still has an enormous user base. Another is Stack Overflow, which needs no introduction. The key to any forum is the content it offers, and the more people whom contribute in terms of posting , the more popular and widely respected it becomes as a reliable source of information. Forums are still intensely popular with gamers, alongside those that offer tips on hacking etc.
  • answers appearance css code request

    Solved Customisation css answers
    11
    1
    1 Votes
    11 Posts
    4k Views
    phenomlab
    @DownPW yes, because of the modifications that Sudonix uses, you’ll need to tailor to fit your needs.
  • creating topic specific widgets

    Solved Customisation nodebb
    16
    10 Votes
    16 Posts
    7k Views
    phenomlab
    @crazycells said in creating topic specific widgets: Additionally if hide class exists, why are we re-defining it? We’re not 🤭 I misspelled it - it should be hidden
  • Display tweets in widget [NodeBB]

    Solved Customisation
    29
    4 Votes
    29 Posts
    13k Views
    JAC
    @phenomlab brilliant, many thanks Mark