实现Javascript与后端PHP的交互实例

本文实现的需求是:

(1)数据库中某表mytable 中有一列nid,其值从19000开始,不连续,中间有不少缺失。

(2)前端页面有一个 input text表单项,名字为nid,ID也为nid。给这个表单项旁边加一个按钮“GET”,希望能够单击该按钮后,从后端数据库中查询mytable中的nid,给出一个没用过的nid的最小值,并填入名字为nid的input text表单项中。

实现步骤是:

(1)在input text表单项旁边加一个按钮“GET”,前端页面,代码如下:

<div class="form-group col-3 p-x-0">
<label class="m-x-16" for="">编号</label>
<input type="text" id="nid" style="width:100px" name="nid" class="form-control m-r-4" value="">
<span onclick="getnid()" ><kbd class="bg-success pointer">GET</kbd></span>
</div>

上述代码中添加了一个GET的按钮,onclick事件javascript的getnid()函数。

(2)撰写 javascript的getnid()函数

<script type="text/javascript">
function getnid(){
    let request = new XMLHttpRequest();
    request.onreadystatechange = function(evt){
        let xhr = evt.target;
        if(xhr.readyState === XMLHttpRequest.DONE && xhr.status===200){
            document.getElementById("nid").value=xhr.responseText;
        }
    }
    request.open('GET','/Test/get_a_new_nid');
    request.send(null);
}
</script>

通过上述代码实现向后端发送一个GET请求,并监测其readyState状态。当收到返回值后,将返回值送给nid。

(3)编写后端的PHP代码:

public function get_a_new_nid()//获得数据库中一个没用过的nid
{
   $f = @fopen("/2023/public/niddata", "r");
   $start = fread($f, 15);
   fclose($f);

   $sql = "select nid from (SELECT @xi:=@xi+1 as nid from 
       (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION SELECT 16 UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 UNION SELECT 20) xc1, 
       (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) xc2, 
       (SELECT @xi:={$start}) xc0) NUM where nid not in (select nid from mytable)";
   $res = $this->db->query($sql)->row_array();
   $result = $res['nid'];
   $f = @fopen("/2023/public/niddata", "w");
   fwrite($f, $result);
   fclose($f);

   echo $result;
}

通过这段代码实现了取数的操作,并通过 echo $result语句返回给前端。

每次取数会从$start开始的200个数中,取出未用过的最小的nid。

为了循环取数,每次将取出的$nid存储在服务器的某文件中,在下次操作时,取出该数作为$start值。

 

 

本站原创文章,转载请注明出处。