【问题标题】:Load Additional Data While scrolling down a page using jQuery Ajax and ASP.NET使用 jQuery Ajax 和 ASP.NET 向下滚动页面时加载附加数据
【发布时间】:2015-07-20 09:42:08
【问题描述】:

我正在尝试在我的项目中应用字幕功能,并决定尝试一下,看看它是如何工作的。但是在测试它时,当我滚动到页面底部时,它会显示一个带有消息Undefined 的客户端脚本错误。我不知道我在代码中做错了什么,也不知道如何让它工作。我希望有人能帮助我解决这个问题。下面是代码:

中继器

<div id="dvCampaigns">
    <asp:Repeater ID="rptUsers" runat="server">
       <ItemTemplate>
           <table cellpadding="2" cellspacing="0" border="1" style="width: 200px; height: 100px;
               border: dashed 2px #04AFEF; background-color: #B0E2F5">
               <tr>
                  <td>
                      <b><u><span class="campaignname">
                      <%# Eval("CampaignName") %></span></u></b>
                  </td>
               </tr>
               <tr>
                   <td>
                       <b>Description: </b><span class="description">
                          <%# Eval("Description") %></span><br />
                          <b>ID: </b><span class="campaign-id">
                          <%# Eval("CampaignID") %></span><br />
                          <b>Date Created: </b><span class="datecreated">
                         <%# Eval("CreatedOn")%></span><br />
                   </td>
               </tr>
           </table>
           <br />
      </ItemTemplate>
   </asp:Repeater>
</div>
<div>
    <img id="loader" alt="" src="../Images/loading.gif" style="display: none" />
</div>

代码隐藏

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            rptCampaigns.DataSource = GetUserData(1);
            rptCampaigns.DataBind();
        }
    }

    public static TList<POLLice.Entities.Campaigns> GetCampaignData(int pageIndex)
    {
        int totalData;
        var items = new CampaignsService().GetAll(pageIndex, 10, out totalData);
        return items;
    }

    [WebMethod]
    public static string GetCampaigns(int pageIndex)
    {
        var dataset = GetUserData(pageIndex).ToDataSet(true);
        return dataset.GetXml();
    }

jQuery 脚本

    <script type="text/javascript">
        var pageIndex = 1;
        var pageCount;
        $(window).scroll(function() {
            if ($(window).scrollTop() == $(document).height() - $(window).height()) {
                GetRecords();
            }
        });
        function GetRecords() {
            pageIndex++;
            if (pageIndex == 2 || pageIndex <= pageCount) {
                $("#loader").show();
                $.ajax({
                    type: "POST",
                    url: "UserProfile/Default.aspx/GetCampaigns",
                    data: '{pageIndex: ' + pageIndex + '}',
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: OnSuccess,
                    failure: function(response) {
                        alert(response.d);
                    },
                    error: function(response) {
                        alert(response.d);
                    }
                });
            }
        }
        function OnSuccess(response) {
            var xmlDoc = $.parseXML(response.d);
            var xml = $(xmlDoc);
            pageCount = parseInt(xml.find("PageCount").eq(0).find("PageCount").text());
            var campaigns = xml.find("Campaigns");
            campaigns.each(function() {
                var campaign = $(this);
                var table = $("#dvCampaigns table").eq(0).clone(true);
                $(".campaignname", table).html(campaign.find("CampaignName").text());
                $(".description", table).html(campaign.find("Description").text());
                $(".campaign-id", table).html(campaign.find("CampaignID").text());
                $(".datecreated", table).html(campaign.find("CreatedOn").text());

                $("#dvCampaigns").append(table).append("<br />");
            });
            $("#loader").hide();
        }
    </script>

非常感谢。

【问题讨论】:

  • 在浏览器中调试你的 JS... 并给我们更具体的数据 .. 究竟是什么未定义
  • 感谢您的回复克拉姆。在 Java 脚本控制台上,它抛出了这个错误:POST http://******/POLLiceWebApp/UserProfile/UserProfile/Default.aspx/GetCampaigns 404 (Not Found)。但是它找不到的方法是在代码隐藏中。 (抱歉,出于安全原因,我不得不将部分 url 替换为 '******')。
  • 请在没有 UserProfilePrefix 的情况下测试以下代码。应该是这样的url:“Default.aspx/GetCampaigns”,
  • @Kram 网址应该是这样的。但现在我在 javascript 控制台上有这个错误:500. Internal Server Error。我不知道如何查找错误。

标签: c# jquery asp.net ajax


【解决方案1】:

在你的 ajax 中有这行:

url: "UserProfile/Default.aspx/GetCampaigns",

您是否删除了这篇文章的完整路径(包括 http),还是您的代码中的这种方式?这需要 web 方法的相对或绝对路径。此外,当使用 ajax 调用 web 方法时,您需要使用:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)] //or whatever your return format is
[WebMethod]

【讨论】:

  • 感谢斯蒂芬的回复。正如您所注意到的,我的 ajax 中的 url 正是它在我的代码中的方式。我还添加了这个:[ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 但它没有改变任何东西。我仍然得到错误。
  • 我将代码更正为url: "Default.aspx/GetCampaigns",现在我在Javascript控制台上得到的错误是500 (Internal Server Error)。有什么想法吗?
  • 这一行需要完整路径:url:"UserProfile/Default.aspx/GetCampaigns",例如:url:"yourWebsite.com/UserProfile/Default.aspx/GetCampaigns",或者url:"/UserProfile/Default.aspx/ GetCampaigns”,注意从网站根目录开始的斜杠。
  • 尝试将数据包装在这样的字符串化中:data: JSON.stringify({ pageIndex: pageIndex }),并去掉单引号。我的猜测是您的方法签名中存在类型不匹配,这就是它找不到您的网络方法的原因。您可以通过在 Web 方法上设置断点并使用 Postman 或 Fiddler 之类的东西来尝试更快地测试它。请注意,JSON 是一个较旧的库,您可能需要使用 $.parseJSON(yourDataObject)
  • 我试过了,但没用。其他人使用了此代码并且它有效。会不会是在 ASP.NET 2.0 上不行?
猜你喜欢
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 2012-10-05
相关资源
最近更新 更多