使用 Ajax 将列表项附加到 jquery 移动列表

Posted

技术标签:

【中文标题】使用 Ajax 将列表项附加到 jquery 移动列表【英文标题】:Appending list items to jquery mobile list using Ajax 【发布时间】:2017-04-16 11:29:29 【问题描述】:

我的 index.html 中有一个列表视图:

    <section id="dashboard" data-role="page" data-transition="slide">
            <header data-role="header">
                <h1>Trips</h1>
      <a href="#addTrip" id="createNewTrip" data-icon="plus" class="ui-btn-right"></a>

            </header>
      <div class="content" data-role="content">
      <ul id="tripData" data-role="listview">

      </ul>
      </div>
    </section>

我可以使用这个控制器从 SQL 数据库中填充这个列表:

$(function() 
  'use strict';

  $.ajax(
    type: 'GET',
    dataType: "json",

    url: '/webApp/models/class.model.getAllTrips.php?action=getAllTrips',

    success: function(data) 

      //inspect the incoming data objects
      console.log(data);

      $.mobile.loading('hide');

      var dataLength = data.rec.length;

      for (var i = 0; i < data.rec.length; i++) 

        var item = data.rec[i];
        var tripId = item.tripId;
        var userId = item.userId;
        var name = item.name;
        var startDate = item.startDate;
        var endDate = item.endDate;

        var tripDetails = '<li><a href="#" class="ui-btn ui-btn-icon-right ui-icon-carat-r">' + name + '<p><b> Start Date: ' + startDate + '</b></p>' + '<p><b> End Date: ' + endDate + '</b></p>' +
          '<input type="hidden"  value=' + tripId + '>' + '</li></a>';

        //push data into dashboard
        $('#tripData').append(tripDetails);

       //close outer loop

    ,

    error: function() 
      console.log(addTripPostData);
      alert('There was an error handling your request!');
      $.mobile.loading('hide');

    

  );

); 

我现在想让用户能够使用此控制器添加行程:

$(document).ready(function() 

  $('#addTripForm').submit(function() 

    var addTripPostData = $(this).serialize();
    console.log(addTripPostData);

    $.mobile.loading('show', 
      text: 'Adding New Trip - Please Wait',
      textVisible: true,
      theme: 'a'
    );

    $.ajax(
      type: 'POST',
      dataType: "json",
      data: addTripPostData,

      url: '/webApp/models/class.model.addTrip.php?action=addTrip',

      success: function(addTripPostData) 

        console.log(addTripPostData);

        $.mobile.loading('hide');

                $('#tripData').append(tripDetails);
                $$('#activity_contacts').listview('refresh');



      ,

      error: function() 
        console.log(addTripPostData);
        alert('There was an error handling your request!');
        $.mobile.loading('hide');

      

    );

    $.mobile.changePage('#dashboard');

    return false;
  );
);

这适用于我创建的表单。它成功地将项目添加到我的 SQL 数据库中。但是,当它把我重定向到保存我的列表视图的页面时,我看不到新的行程。我必须单击“刷新”按钮才能看到它。这对我没有好处,因为这将是一个移动应用程序。

有人可以帮助我吗?提前致谢 =)

【问题讨论】:

什么是$$('#activity_contacts').listview('refresh'); 【参考方案1】:

我要做的是在添加的元素上添加一个刷新类,检查元素,当一个元素有一个刷新类时刷新它,这样你就可以绕过它。因此,如果您想将其包含在其他页面中,则只刷新页面的一部分。

【讨论】:

它是在线的还是在本地服务器上,如果它在线我可以看到它,如果它离线可能会添加一些错误捕获【参考方案2】:

您可能需要增强页面的主要内容,列表视图将被包括在内:

$(document).on("pagecontainershow", function(e, ui)  
    var pageId = $(":mobile-pagecontainer").pagecontainer("getActivePage").prop("id");
    if (typeof ui.toPage == "object") 
        /* manipulate page navigating to */
        switch(pageId) 
            case "dashboard":
                $('.ui-content').enhanceWithin();
                break;
        
    
);

您也可以将$.mobile.changePage('#dashboard'); 移动到 ajax addTrip 成功处理程序中,在$('#tripData').append(tripDetails); 之后

【讨论】:

以上是关于使用 Ajax 将列表项附加到 jquery 移动列表的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 将新列表项添加到待办事项列表?

滚动无法动态添加到 jQuery 移动列表的项目

将 <li> 附加到 <ul> 但不能成为可拖动的 jQuery [重复]

jQuery windows 移动应用程序“附加(html)不起作用”

使用ajax将drupal视图加载到右边距

表单数据仅附加最后的多项选择