将php循环变量发送到javascript文件

时间:2017-11-22 08:54:01

标签: javascript php json ajax

我的file.js调用一个php文件从数据库中获取并返回一个编码的JSON对象,这样我就可以将它放在一个表上。这是file.js -

<?php
date_default_timezone_set("Asia/Manila");

$servername = "localhost";
$username = "root";
$password = "";
$db = "exampledb";


// Create connection
$conn = new mysqli($servername, $username, $password,$db);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

?>

backend.php文件 -

url = "backend.php"
xmlhttp.open("GET", url, true);
xmlhttp.send();

xmlhttp.onreadystatechange = function() 
{
    if (this.readyState == 4 && this.status == 200) 
    {
        myJSONObj = JSON.parse(this.responseText);
        for ( i=0;i<myJSON.length;i++)
         {
          var x = document.getElementById("datatable").rows[i].cells;
          x[6].innerHTML =obj[i].age;
         }
     }
 }

这完全正常,但我必须等待PHP while循环才能完成,这需要很长时间才能完成大量条目。我希望能够在循环中返回JSON,而不是最后。 有什么办法可以在PHP while循环运行时制作xmlhttp请求并继续接收JSON,而不必等待它完成然后一起发送所有行?感谢

1 个答案:

答案 0 :(得分:0)

我认为你应该使用mysql limit

JS:

var hasData = true;
var loop = 0;

while(hasData){

url = "backend.php?page="+loop;
xmlhttp.open("GET", url, true);
xmlhttp.send();

xmlhttp.onreadystatechange = function() 
{
    if (this.readyState == 4 && this.status == 200) 
    {
    if(this.reponseText != ""){

        myJSONObj = JSON.parse(this.responseText);
        for ( i=0;i<myJSON.length;i++)
        {
            var x = document.getElementById("datatable").rows[i].cells;
            x[6].innerHTML =obj[i].age;
        }
    }else{
        hasData = false; //if no data retrieved
    }//end if

    }//end if
 }


loop++; //increment loop

}//end while

PHP:

$loop = $_GET['loop'];
if($loop != ""){
    $max_output = 10; //how many rows you want to display per query
    $starting_row = $max_output * $loop; 
    // LIMIT 0, 10 = if loop is 0
        // LIMIT 10, 10 = if loop is 1
    // LIMIT 20, 10 = if loop is 2

    $sql_stmt= "SELECT * FROM TABLE LIMIT {$starting_row}, {$max_output}";
    $result = odbc_exec($conn_id, $sql_stmt);
    if($result){
        while ($row = odbc_fetch_array($result)) {
            $age=$row['age'];
            $ages[] = array('age'=> $age);
        }
        $myJSON = json_encode($ages);
        echo $myJSON;
    }else{
        exit; //make sure nothing is echoed/print
    }
}

    {
        myJSONObj = JSON.parse(this.responseText);
        for ( i=0;i<myJSON.length;i++)
         {
          var x = document.getElementById("datatable").rows[i].cells;
          x[6].innerHTML =obj[i].age;
         }
     }
 }

希望这有帮助