Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从mysql/php Json编码数据和Jquery加载内容_Php_Javascript_Jquery_Mysql_Jquery Mobile - Fatal编程技术网

从mysql/php Json编码数据和Jquery加载内容

从mysql/php Json编码数据和Jquery加载内容,php,javascript,jquery,mysql,jquery-mobile,Php,Javascript,Jquery,Mysql,Jquery Mobile,我正在使用Jquery mobile创建一个移动应用程序。我将数据从mysql DB获取到一个PHP页面,将数据编码为Json,然后使用Jquery ajax请求将其呈现在HTML页面中,并将数据附加到JQM“listview”中,但由于数据量巨大,我希望在用户滚动到页面底部“惰性加载”时逐渐加载列表视图 我的PHP代码示例: $result = mysql_query("SELECT * FROM $tableName ORDER BY alpha"); $array = mysql_fet

我正在使用Jquery mobile创建一个移动应用程序。我将数据从mysql DB获取到一个PHP页面,将数据编码为Json,然后使用Jquery ajax请求将其呈现在HTML页面中,并将数据附加到JQM“listview”中,但由于数据量巨大,我希望在用户滚动到页面底部“惰性加载”时逐渐加载列表视图

我的PHP代码示例:

$result = mysql_query("SELECT * FROM $tableName ORDER BY alpha");

$array = mysql_fetch_row($result);     

    $data = array();    
    while ($row = mysql_fetch_row($result))
    {   
    $data[] = $row;

    }

    echo $_GET['callback'] . '('.json_encode($data).')';
我的JS代码:

 $.ajax({ 
  type: "POST",                                     
  url: 'http://example.com/api.php',  
  dataType: 'jsonp',
  contentType: "application/json",
  cache: false,
  success: function(data)
  { 
  $("#loading").hide();  
    for (var i in data) 
    {
      var row = data[i];          
      var id =  row[0];
      var alpha = row[1]
      var name =row[2];
      var url = row[3];   

     $("#filelist").append('<li id="'+id+'"><input name="name'+id+'" id="song'+id+'" type="checkbox" class="selectme"><label for="song'+id+'" rel="'+url+'">'+name+'</label></li>').trigger("create");   
     $("#filelist").listview("refresh");

    }
      $("#filelist").listview("refresh");

});
$.ajax({
类型:“POST”,
网址:'http://example.com/api.php',  
数据类型:“jsonp”,
contentType:“应用程序/json”,
cache:false,
成功:功能(数据)
{ 
$(“#加载”).hide();
用于(数据中的var i)
{
var行=数据[i];
变量id=行[0];
var alpha=行[1]
变量名称=行[2];
var url=行[3];
$(“#文件列表”).append(“
  • “+name+”
  • ”).trigger(“创建”); $(“#文件列表”).listview(“刷新”); } $(“#文件列表”).listview(“刷新”); });
    这可以正常工作,但会从数据库加载所有数据 我如何能够分块加载数据—不是一次我使用waypoint插件检测滚动到底部动作—现在我需要的是帮助从DB逐步加载数据

    注意:我尝试使用dcarrith.github.io/jquery.mobile.lazyloader/但无法找到解决方案

    非常感谢你的帮助

    更新: 我设法将来自DB的Json数据加载到不同的页面中,这样我就可以从url www.myDomain.com/api.php?page=2和www.myDomain.com/api.php?page=1中调用前10项,以此类推,当您在jquery Ajax请求中调用它时,您只会加载这部分数据

    实现分页的代码如下:

    <?php
      header('Content-type: text/html; charset=utf-8');
      $host = "xxxxxxxxxxx";
      $user = "xxxxxx";
      $pass = "xxxxxx";
    
      $databaseName = "xxxxxxx";
      $tableName = "xxxxxxxx";
    
      //--------------------------------------------------------------------------
      // 1) Connect to mysql database
      //--------------------------------------------------------------------------
    
      $con = mysql_connect($host,$user,$pass);
      $dbs = mysql_select_db($databaseName, $con);
    
        $tbl_name="xxxxxx";     //your table name
        // How many adjacent pages should be shown on each side?
        $adjacents = 3;
    
        /* 
           First get total number of rows in data table. 
           If you have a WHERE clause in your query, make sure you mirror it here.
        */
        $query = "SELECT COUNT(*) as num FROM $tbl_name";
        $total_pages = mysql_fetch_array(mysql_query($query));
        $total_pages = $total_pages[num];
    
        /* Setup vars for query. */
        $targetpage = "test.php";   //your file name  (the name of this file)
        $limit = 10;                                //how many items to show per page
        $page = $_GET['page'];
        if($page) 
            $start = ($page - 2) * $limit;          //first item to display on this page
        else
        $start = 0;                             //if no page var is given, set start to 0
    
        /* Get data. */
        $sql = "SELECT * FROM $tbl_name ORDER BY alpha LIMIT $start, $limit";
        mysql_query("SET NAMES utf8;");
        $result = mysql_query($sql);
    
        /* Setup page vars for display. */
        if ($page == 0) $page = 1;                  //if no page var is given, default to 1.
        $prev = $page - 1;                          //previous page is page - 1
        $next = $page + 1;                          //next page is page + 1
        $lastpage = ceil($total_pages/$limit);      //lastpage is = total pages / items per page, rounded up.
        $lpm1 = $lastpage - 1;                      //last page minus 1
    
        /* 
            Now we apply our rules and draw the pagination object. 
            We're actually saving the code to a variable in case we want to draw it more than once.
        */
        $pagination = "";
        if($lastpage > 1)
        {}
    ?>
    
        <?php
        $data = array();
            while($row = mysql_fetch_array($result))
            {
    
            // Your while loop here
            $data[] = $row; 
    
            }
            echo $_GET['callback'] . '('.json_encode($data).')';
        ?>
    
    <?=$pagination?>
    

    您将希望教授PHP API以及jQuery移动应用程序“偏移”和“限制”的概念

    假设您希望一次加载10个元素:

    您的第一个请求是:

    http://example.com/api.php?offset=0&limit=10
    
    http://example.com/api.php?offset=10&limit=10
    
    您的第二个请求(在滚动时触发)将是:

    http://example.com/api.php?offset=0&limit=10
    
    http://example.com/api.php?offset=10&limit=10
    
    您可以将此ajax结果附加到现有列表中

    在PHP方面,您需要:

    mysql_query("SELECT * FROM $tableName ORDER BY alpha LIMIT $limit OFFSET $offset")
    

    这已经是两年了。但我想我有一个想法。如果你把ajax放在一个函数中,然后每当你检测到页面结束时,你调用该函数。并动态更改url。

    感谢AllinOne为我指出这一点,我研究了限制和偏移量,创建了一个PHP页面,现在我可以使用:?page=1 a导航到结果当我向JS代码发出Ajax请求时,它是可读的,现在我正在研究如何在滚动到底部并动态导航到页面2时动态实现它,直到到达DB(页面)的内容末尾。