locked
Issue in calling the method RRS feed

  • Question

  • User-389597101 posted

    Hi All

    I have created a file "test.js" in asp.net project with the following code

    function Alert()
    {
        alert("Alert");
    }

    There is another file where I am doing lazy loading using register script and require methods.

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
        <script src="http://ajax.microsoft.com/ajax/beta/0911/Start.js"></script>
    
    </head>
    <body>
    
        <form id="form1" runat="server">
            <asp:ScriptManager runat="server" EnableCdn="True"></asp:ScriptManager>
            <a href="#">Click Me</a>
        </form>
        <script type="text/javascript">
            
            $(document).ready(
                function () {
                    $("a").click(
                        function () {
                            try {
                                Sys.loader.defineScript({
                                    name: "MyLibrary",
                                    debugUrl: "%/../test.js",
                                    releaseUrl: "%/../test.js",
                                    dependencies:
                                      ["jQuery", "Start"],
                                    isLoaded: !!(window.jQuery)
                                });
    
                                Sys.require(Sys.scripts.MyLibrary);
                                Alert();
    
                            } catch (e) {
                                alert(e);
                            }
                        });
                });
        </script>
    </body>
    </html>
    

    But I am getting the error - "ReferenceError: Alert is not defined". Am I doing anything wrong.

    Tuesday, September 4, 2018 6:41 AM

Answers

  • User-893317190 posted

    Hi karang,

    How do you define your test.js? Is it still function Alert(){ alert("alert")}?

    If so, please change your  code. I will highlight the code which you need to pay attention.

    <form id="form1" runat="server">
            <asp:ScriptManager runat="server" EnableCdn="True"></asp:ScriptManager>
            <a href="#">Click Me</a>
           <script type="text/javascript">
    
             Sys.loader.defineScript({
                                    name: "MyLibrary",
                                   releaseUrl: "/Scripts/test.js", 
                                   
                                    dependencies:
                                      ["jQuery"],
                                    isLoaded: !!(window.Alert)
                                });
                                    Sys.require(Sys.scripts.MyLibrary);  
                $(document).ready(
                function () {
                    $("a").click(
                        function () {
                            try {
                               
                                Alert();
    
                            } catch (e) {
                                alert(e);
                            }
                        });
                });
    
         
           
        </script>

    Best regards,

    Ackerly Xu

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Thursday, September 6, 2018 11:22 AM
  • User-893317190 posted

    Hi karang,

    Please don't use debugurl,please use releaseUrl. 

    <script>
        
      
                Sys.loader.defineScript({
                    name: "MyLibrary",
                    releaseUrl: "/test.js",
                    dependencies: ["jQuery"],
                    isLoaded: !!(window.TestMethod)
                });
    
                Sys.require(Sys.scripts.MyLibrary);
            
            $(document).ready(
                function () {
                    $("a").click(
                        function () {
                            try {
                                TestMethod();
                                //Sys.require(Sys.scripts.MyLibrary, TestMethod());                            
                            } catch (e) {
                                alert(e);
                            }
                        });
                });
    </script>

    Best regards,

    Ackerly Xu

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Thursday, September 6, 2018 11:49 AM

All replies

  • User-893317190 posted

    Hi karang,

    % in "%/../test.js" represents the relative to the path where you download start.js , so the url will be https://ajax.microsoft.com/ajax/beta/test.js.

    So please change it to the path relative to your application , for example ,"/Scripts/test.js" represents  the  test.js file in Scripts folder which is  at the root path.

    And you should also change  the isLoaded property to !!window.Alert to ensure that the text.js is loaded.

    Below is my code.

     <form id="form1" runat="server">
            <asp:ScriptManager runat="server" EnableCdn="True"></asp:ScriptManager>
            <a href="#">Click Me</a>
           <script type="text/javascript">
    
             Sys.loader.defineScript({
                                    name: "MyLibrary",
                                   releaseUrl: "/Scripts/test.js", 
                                   
                                    dependencies:
                                      ["jQuery"],
                                    isLoaded: !!(window.Alert)
                                });
                                    Sys.require(Sys.scripts.MyLibrary);  
                $(document).ready(
                function () {
                    $("a").click(
                        function () {
                            try {
                               
                                Alert();
    
                            } catch (e) {
                                alert(e);
                            }
                        });
                });
    
         
           
        </script>
    

    As you could see , I put the Sys.loader.defineScript and Sys.require(Sys.scripts.MyLibrary) outside  $(document).ready , because  the script is  lazily loaded, when you call the Alert function , your test.js may not be loaded. 

    Also please remove your Start dependency , it seems there is no script  named Start in Sys.scripts.

    Best regards,

    Ackerly Xu

    Wednesday, September 5, 2018 8:23 AM
  • User-389597101 posted

    Hi Ackerly

    Thanks for the response. I have used following code

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
        <script src="http://ajax.microsoft.com/ajax/beta/0911/Start.js"></script>
    </head>
    <body>
    
        <form id="form1" runat="server">
            <asp:ScriptManager runat="server" EnableCdn="True"></asp:ScriptManager>
            <a href="#">Click Me</a>
        </form>
        <script type="text/javascript">
            try {
                Sys.loader.defineScript({
                    name: "MyLibrary",
                    debugUrl: "test.js",
                    dependencies: ["jQuery"],
                    isLoaded: !!(window.alert)
                });
                Sys.require(Sys.scripts.MyLibrary);
            } catch (e)
            {
                alert(e);
            }
            $(document).ready(
                function () {
                    $("a").click(
                        function () {
                                Alert();
                        });
                });
        </script>
    </body>
    </html>
    

    But no alert is popped up. Could you please check if this is fine.

    Thursday, September 6, 2018 5:14 AM
  • User-893317190 posted

    Hi karang,

    It seems your function‘s A is upper case.

    function Alert()
    {
        alert("Alert");
    }

    If you haven't modify your test.js , please use 

    isLoaded: !!(window.Alert)

    Best regards,

    Ackerly Xu

    Thursday, September 6, 2018 8:11 AM
  • User-1739700955 posted

    I will recommend you to change the name of the function, as "alert" is predefedind function of javascript.

    Thursday, September 6, 2018 10:33 AM
  • User-389597101 posted

    Hi NadeemDev

    Thanks for the response. I have changed it and changed some code as well. But still I am getting the reference error.

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
        <script src="http://ajax.microsoft.com/ajax/beta/0911/Start.js"></script>
    </head>
    <body>
    
        <form id="form1" runat="server">
            <asp:ScriptManager runat="server" EnableCdn="True"></asp:ScriptManager>
            <a href="#">Click Me</a>
        </form>
        <script type="text/javascript">
    
            $(document).ready(
                function () {
                    $("a").click(
                        function () {
                            try {
                                Sys.loader.defineScript({
                                    name: "MyLibrary",
                                    debugUrl: "/test.js",
                                    dependencies: ["jQuery"],
                                    isLoaded: !!(window.alert)
                                });
    
                                Sys.require(Sys.scripts.MyLibrary, TestMethod());                            
                            } catch (e) {
                                alert(e);
                            }
                        });
                });
        </script>
    </body>
    </html>
    

    Thursday, September 6, 2018 11:06 AM
  • User-893317190 posted

    Hi karang,

    How do you define your test.js? Is it still function Alert(){ alert("alert")}?

    If so, please change your  code. I will highlight the code which you need to pay attention.

    <form id="form1" runat="server">
            <asp:ScriptManager runat="server" EnableCdn="True"></asp:ScriptManager>
            <a href="#">Click Me</a>
           <script type="text/javascript">
    
             Sys.loader.defineScript({
                                    name: "MyLibrary",
                                   releaseUrl: "/Scripts/test.js", 
                                   
                                    dependencies:
                                      ["jQuery"],
                                    isLoaded: !!(window.Alert)
                                });
                                    Sys.require(Sys.scripts.MyLibrary);  
                $(document).ready(
                function () {
                    $("a").click(
                        function () {
                            try {
                               
                                Alert();
    
                            } catch (e) {
                                alert(e);
                            }
                        });
                });
    
         
           
        </script>

    Best regards,

    Ackerly Xu

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Thursday, September 6, 2018 11:22 AM
  • User-389597101 posted

    Hi Ackerly

    I have modified the method name from Alert to TestMethod. So the code is also changed accordingly. But I am getting this error - "TypeError: Cannot read property 'replace' of undefined". One more thing, the file test.js is placed on the root folder.

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
        <script src="http://ajax.microsoft.com/ajax/beta/0911/Start.js"></script>
    </head>
    <body>
    
        <form id="form1" runat="server">
            <asp:ScriptManager runat="server" EnableCdn="True"></asp:ScriptManager>
            <a href="#">Click Me</a>
        </form>
        <script type="text/javascript">
    
            try {
                Sys.loader.defineScript({
                    name: "MyLibrary",
                    debugUrl: "/test.js",
                    dependencies: ["jQuery"],
                    isLoaded: !!(window.TestMethod)
                });
    
                Sys.require(Sys.scripts.MyLibrary);
            } catch (e) {
                alert(e);
            }
            $(document).ready(
                function () {
                    $("a").click(
                        function () {
                            try {
                                TestMethod();
                                //Sys.require(Sys.scripts.MyLibrary, TestMethod());                            
                            } catch (e) {
                                alert(e);
                            }
                        });
                });
        </script>
    </body>
    </html>
    

    Thursday, September 6, 2018 11:28 AM
  • User-893317190 posted

    Hi karang,

    Please don't use debugurl,please use releaseUrl. 

    <script>
        
      
                Sys.loader.defineScript({
                    name: "MyLibrary",
                    releaseUrl: "/test.js",
                    dependencies: ["jQuery"],
                    isLoaded: !!(window.TestMethod)
                });
    
                Sys.require(Sys.scripts.MyLibrary);
            
            $(document).ready(
                function () {
                    $("a").click(
                        function () {
                            try {
                                TestMethod();
                                //Sys.require(Sys.scripts.MyLibrary, TestMethod());                            
                            } catch (e) {
                                alert(e);
                            }
                        });
                });
    </script>

    Best regards,

    Ackerly Xu

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Thursday, September 6, 2018 11:49 AM
  • User-389597101 posted

    Hi Ackerly Xu

    Thanks a lot for all your support. It worked :)

    Thursday, September 6, 2018 11:51 AM