简体   繁体   中英

Uncaught ReferenceError: CallApi is not defined

I'm trying to call an API using a submit button but i'm getting the following errors when i inspect the page on Chrome:

Uncaught ReferenceError: CallApi is not defined

My code is as follows:

  <script type="text/javascript" href="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js">



function CallApi(event)
{
  var username = "****"
  var password = "***"
  var engagamentId=$('#ctl00_ctl05_fvlc_Form1_txtEngagementID').val();
  if (engagamentId) 

    $.ajax({
      url: 'https://hello.com/engagements/engagementdetails/'+ $('#ctl00_ctl05_fvlc_Form1_txtEngagementID').val(),
      type: "GET",
      crossDomain: true,
      dataType: "jsonp",
      jsonp: "json_callback",
      headers: {
                "Authorization": "Basic " + btoa(username + ":" + password)"
                },
      success: function (data) {  
        $('#ctl00_ctl05_fvlc_Form1_txtEngagementID').val(data.EngagementID);
        $('#ctl00_ctl05_fvlc_Form1_txtClientName').val(data.ClientName);
        $('#ctl00_ctl05_fvlc_Form1_txtPOA').val(data.AccountingEndPeriod);
        $('#ctl00_ctl05_fvlc_Form1_txtCurrentTaxYear').val(data.TaxYear);
        $('#ctl00_ctl05_fvlc_Form1_txtEngagementManager').val(data.EngagementManager);

      },
      error:function(a,b,c)
      {
        alert(a.responseText);
        //alert("Engagement not found!");
      }

    });
  else alert("Please enter 'Engagement ID'");
}

And my button has the following HTML:

<input type="button" value="Get Engagement Details" onclick="CallApi(event)" class="RadButton RadButton_Cora rbButton rbRounded rbIconButton">

Could anyone advise what i'm doing wrong? I have looked at related questions/answers but can't seem to get it working.

Thanks!

the function is not defined, so most likely the javascript file is not included correctly.to prevent mistakes like this:

  1. include files using src instead of href <script src="myscripts.js"></script>
  2. include files in the correct order (first jquery, then your script)
  3. understand what the term hoisting means in js
  4. check developer tools in chrome (network) to check if files are loaded correctly or check window.CallApi, since it should be defined globally
  5. if you define scripts direclty in html, still wrap them with script tags <script>function CallApi(event) {console.log(event);};</script>

You are both trying to import JQuery and write a custom JS code in the same script tag.

You must include JQuery in a tag. Then in another tag declare your custom JS code.

Do it this way (i'm just doing an alert for demonstration purpose) :


<html>
<head>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

    <script type="text/javascript">
        function CallApi(event) {
            alert('test')
        }
    </script>
</head>

<body>
   <input type="button" value="Get Engagement Details" onclick="CallApi(event)" />
</body>
</html>

The following HTML file works for me, in so far as it can call your API url, and get a 404, then alert in the error callback:

<html>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"> 
  </script>
  <script>

    function CallApi(event)
    {
      var username = "****"
      var password = "***"
      var engagamentId=$('#ctl00_ctl05_fvlc_Form1_txtEngagementID').val();
      if (engagamentId) 

      $.ajax({
       url: 'https://hello.com/engagements/engagementdetails/'+ 
          $('#ctl00_ctl05_fvlc_Form1_txtEngagementID').val(),
       type: "GET",
       crossDomain: true,
       dataType: "jsonp",
       jsonp: "json_callback",
       headers: {
        "Authorization": "Basic " + btoa(username + ":" + password)
       },
        success: function (data) {  
          $('#ctl00_ctl05_fvlc_Form1_txtEngagementID').val(data.EngagementID);
          $('#ctl00_ctl05_fvlc_Form1_txtClientName').val(data.ClientName);
          $('#ctl00_ctl05_fvlc_Form1_txtPOA').val(data.AccountingEndPeriod);
          $('#ctl00_ctl05_fvlc_Form1_txtCurrentTaxYear').val(data.TaxYear);
          $('#ctl00_ctl05_fvlc_Form1_txtEngagementManager').val(data.EngagementManager);

       },
       error:function(a,b,c)
       {
         alert(a.responseText);
         //alert("Engagement not found!");
       }
     });
     else alert("Please enter 'Engagement ID'");
   }
 </script>
 <input type="button" value="Get Engagement Details" onclick="CallApi(event)" 
    class="RadButton RadButton_Cora rbButton rbRounded rbIconButton">
  <input type="text" id="ctl00_ctl05_fvlc_Form1_txtEngagementID" value="foo" />
</html>

It doesn't work because on moment the DOM is created by the browser, the CallApi function doesn't exist yet. This occurs because of the order that element and the scripts is loaded. I believe if you insert the script in <head> section, the function should work.

I recommend change to something like this:

$ (document) .ready (function () {
   $ ('#id-of-my-button-element').on('click', CallApi);
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM