jQuery导致错误:单击没有代码的东西时未定义

时间:2019-03-04 14:21:21

标签: c# jquery asp.net

我是jquery的新手,正在四处乱逛,正在读取一些可爱的json,一切正常。.直到我添加了链接以下载表格以填写..然后单击它,它便完成了下载但是,现在也说“错误:未定义”,这似乎是因为用于填充json结果的代码尚未完成,但是我不确定如何避免这种情况。

<%@ Page Title="TEST Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="RSChanges.WebForm1" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <script>

        function getg1()
        {
            showData = $('#group1');
            $.ajax({
                url: '/url1',
                type: 'GET',
                success: function (data)
                {
                    var content="";
                    var i;
                    for (i = 0; i < data.HDData.length; i++)
                    {
                            content += '<li>' + data.number+ '</li>';
                    }
                    showData.html(content);
                },
                error: function (xx, textStatus, errorThrown)
                {
                    alert("error: " + xx.responseText);
                }
                });
        }

        $(document).ready(function ()
        {
            $('body').css('background-color', '#095BB5');
            $('body').css('color', 'white');
            $('a').css({ 'color': '#E0FFFF', 'textDecoration': 'underline' });
            $('#g1').click(function () { $('#group1').toggle(); });
            $('#group1').toggle();
            getg1();
        });
    </script>

       <div> Link to the current <a id="currentform" href="form.xls">download form</a><br /><br /></div>
    Current Active group1 (click <a id="g1">here</a> to show/hide)<br />
    <div class="group1" id="group1">(Loading please wait...)</div>
</asp:Content>

所以,这是代码,我用某种方式将json更新,并更改了事物名称以保护无辜者。

但是,它仍然会这样做,启动页面,并在单击显示错误的表单时显示错误:在弹出框中未定义。如果我单击组并展开它们(仅显示此处的1),然后等到所有内容下载完毕,似乎就不会发生。我怎么没有弹出错误框?

主表格-

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="RSChanges.SiteMaster" %>

<!DOCTYPE html>

<html lang="en">
<head runat="server">
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title><%: Page.Title %></title>

    <asp:PlaceHolder runat="server">
        <%: Scripts.Render("~/bundles/modernizr") %>
    </asp:PlaceHolder>

    <webopt:bundlereference runat="server" path="~/Content/css" />
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />

    <style> 
        html, body{ height: 100%;}
    </style>
</head>
<body>
    <form runat="server">
        <asp:ScriptManager runat="server">
            <Scripts>
                <%--To learn more about bundling scripts in ScriptManager see https://go.microsoft.com/fwlink/?LinkID=301884 --%>
                <%--Framework Scripts--%>
                <asp:ScriptReference Name="MsAjaxBundle" />
                <asp:ScriptReference Name="jquery" />
                <asp:ScriptReference Name="bootstrap" />
                <asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
                <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
                <asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
                <asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
                <asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
                <asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
                <asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
                <asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
                <asp:ScriptReference Name="WebFormsBundle" />
                <%--Site Scripts--%>
            </Scripts>
        </asp:ScriptManager>
        <div class="container body-content">
            <asp:ContentPlaceHolder ID="MainContent" runat="server"></asp:ContentPlaceHolder>
        </div>
    </form>
        <footer>
            <p>&copy; <%: DateTime.Now.Year %></p>
        </footer>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

通过单击链接,您将启动一个新的HTTP请求。这可能会中断当前正在页面上运行的所有JS(包括AJAX请求)。通常,单击超链接(或提交表单)将导致您的页面被破坏并加载一个新页面,这显然会杀死页面中运行的所有JS。

由于此请求恰巧返回了要下载的文件,因此显然不会最终发生。但是,由于期望从服务器获取新的HTML页面,它仍然可能会中断JS执行。

如果您输入

target="_blank" 

<a标记中,以便它在另一个选项卡/窗口中打开URL,然后打开文件不应干扰当前页面,因为浏览器不再希望替换它。

答案 1 :(得分:0)

从您的代码中,我可以看到您的代码是从您发送AJAX请求的URL中获取的。尽管如此,我还是建议您检查收到的错误响应。 console.log(xx),因为显然xx没有带有键“ responseText”的数组。那是我们未定义的。