Javascript 如何在不刷新页面的情况下从php中的sql server数据库获取数据

Javascript 如何在不刷新页面的情况下从php中的sql server数据库获取数据,javascript,jquery,sql-server,ajax,sql-server-2012,Javascript,Jquery,Sql Server,Ajax,Sql Server 2012,我正试图从数据库中获取一些数据。我创建了一个位于functions.php文件中的函数,该文件返回一个值。在另一个页面上,我创建了一个变量,并得到了该值。我试图使用onkey检查数据库,但后来我意识到我需要知道票证的数量,即使它们没有键入任何内容 以下是函数: function.php function is_ticket_able($conn){ $query = "select number_of_tickets from [dbo].[TICKETS] " ; $stmt = s

我正试图从数据库中获取一些数据。我创建了一个位于
functions.php
文件中的函数,该文件返回一个值。在另一个页面上,我创建了一个变量,并得到了该值。我试图使用
onkey
检查数据库,但后来我意识到我需要知道票证的数量,即使它们没有键入任何内容

以下是函数:

function.php

function is_ticket_able($conn){


$query = "select number_of_tickets from [dbo].[TICKETS] " ;


 $stmt = sqlsrv_query($conn, $query);


 while ($row = sqlsrv_fetch_array($stmt)) {
     $amount_of_tickets = $row['number_of_tickets'];

 }

   return $amount_of_tickets;

 }
$amount_of_tickets = is_ticket_able($conn);
function is_ticket_able($conn){


$query = "select number_of_tickets from [dbo].[TICKETS_LKUP] " ;


 $stmt = sqlsrv_query($conn, $query);


 while ($row = sqlsrv_fetch_array($stmt)) {


    $ticket = $row['number_of_tickets'];

   }

   return $ticket;
}
并且,我正在尝试检查数据库(不刷新页面)并获取此页面上的值:

application.php

function is_ticket_able($conn){


$query = "select number_of_tickets from [dbo].[TICKETS] " ;


 $stmt = sqlsrv_query($conn, $query);


 while ($row = sqlsrv_fetch_array($stmt)) {
     $amount_of_tickets = $row['number_of_tickets'];

 }

   return $amount_of_tickets;

 }
$amount_of_tickets = is_ticket_able($conn);
function is_ticket_able($conn){


$query = "select number_of_tickets from [dbo].[TICKETS_LKUP] " ;


 $stmt = sqlsrv_query($conn, $query);


 while ($row = sqlsrv_fetch_array($stmt)) {


    $ticket = $row['number_of_tickets'];

   }

   return $ticket;
}
然后,我只是检查
$amount\u of \u tickets
是否不是0或1。因为如果是一个,那么一些东西必须改变

我正在这样做(在application.php内部):

编辑:我知道AJAX是最适合使用的,但我对它的使用感到困惑

更新:

function.php

function is_ticket_able($conn){


$query = "select number_of_tickets from [dbo].[TICKETS] " ;


 $stmt = sqlsrv_query($conn, $query);


 while ($row = sqlsrv_fetch_array($stmt)) {
     $amount_of_tickets = $row['number_of_tickets'];

 }

   return $amount_of_tickets;

 }
$amount_of_tickets = is_ticket_able($conn);
function is_ticket_able($conn){


$query = "select number_of_tickets from [dbo].[TICKETS_LKUP] " ;


 $stmt = sqlsrv_query($conn, $query);


 while ($row = sqlsrv_fetch_array($stmt)) {


    $ticket = $row['number_of_tickets'];

   }

   return $ticket;
}
application.php

$amount_of_tickets = is_ticket_able($conn);

<script type="text/javascript">
 var global_isTicketAble = 0;

 checkTicket();

 function checkTicket()
 {
    $.ajax(
       {
        url: "application.php",
        method: 'GET',
        dataType: 'text',
        async: true,
        success: function( text )
        {
            global_isTicketAble = text;
            alert(global_isTicketAble);
            if( global_isTicketAble == 0 ){
                        window.location.replace("http://www.google.com");
            }
            setTimeout( checkTicket, 5000 ); // check every 5 sec
        }
    });        
   }



   </script> 
$amount\u of \u tickets=可购买的票证($conn);
var全局变量表=0;
支票票();
函数checkTicket()
{
$.ajax(
{
url:“application.php”,
方法:“GET”,
数据类型:“文本”,
async:true,
成功:函数(文本)
{
全局_isTicketAble=文本;
警报(全球可识别);
if(全局_isTicketAble==0){
window.location.replace(“http://www.google.com");
}
setTimeout(checkTicket,5000);//每5秒检查一次
}
});        
}

因此,现在的问题是,当I
alert(global_isTicketAble)时它不会从数据库中警告值,但会警告应用程序内部的所有内容。php…Help plzzz

服务器端

假设您需要定期检查
$amount\u of_tickets
,并且可以将其计算到application.php,在该文件中

<?php

    // $conn is defined and set somewhere

    $amount_of_tickets = is_ticket_able($conn);

    echo $amount_of_tickets;
    exit(0);
?>
请注意,
$.ajax()
发送请求但不等待响应(因为
async
设置为
true
)。当收到请求时,将执行指定为
success
的功能

完整的jQueryAjax函数文档可以在这里找到


我假设您有一个页面(application.php)在某处显示一个表。 您希望用数据库中的数据填充该表

我不确定您希望何时刷新这些数据。 单击按钮或定期(如每5秒)。。。但我在下面的解释并不重要

在application.php中: 按照你已经知道的方式来组装你的所有页面

但是在它里面,somewere,只是在表应该显示的地方插入一个空div:

<div id="dynamicContent"></div>
在function.php中,您将像这样检索它(与任何正常的POST数据一样):

如果您不需要将数据从客户端脚本传递到服务器端PHP。。。只需将其定义为空

PostData="";
那么,关于目的地:
这是空的“dynamicdiv”id(我在上面将其命名为“dynamicContent”)的位置。
不要忘记id的标签(#)或类的点。
这是一个jQuery选择器。
在这里,PostData的定义如下:

Fname=$("#Fname").val(); // user inputs
Lname=$("#Lname").val();
PostData="Fname="+Fname+"&Lname="+Lname;
Destination="#dynamicContent";
ajax请求的结果将进入“动态div”。
这将是function.php中定义的结果

所以,如果您听我说,您必须在function.php中构建表…
我指的是进行数据库查询和whilefetch的部分

echo "<table>";
echo "<tr><th>column title 1</th><th>column title 2</th></tr>"
while ($row = sqlsrv_fetch_array($stmt)){
    echo "<tr><td>" . $row['data1'] . "</td><td>" . $row['data2'] . "</td></tr>";
}
echo "</table>";
echo”“;
回显“列标题1列标题2”
while($row=sqlsrv\u fetch\u数组($stmt)){
回显“$row['data1']”。$row['data2']”;
}
回声“;
因此,如果没有数据,表将为空。
您将只获得表和表标题。。。但没有行。
这样就不需要检查是否有数据的函数了

最后。。。关于刷新的触发器:
在application.php中,您可以放置一个触发getData()的按钮。。。或者您可以定义设置间隔。
这取决于你。

这就是我如何使用ajax刷新页面的一部分,而不完全重新加载它。
由于ajax对您来说是新手,我希望这个答案会有所帮助。
;)

------------------------
根据Ariel的评论进行编辑(2016-05-01)

好吧,我明白了!试试这个:

在application.php中:

<div id="dynamicDiv"></div>


<script type="text/javascript">

    // timer to trigger the function every seconds
    var checkInterval = setInterval(function(){
        checkTicket();
    },1000);


    function checkTicket(){
        $.ajax({
            type: "POST",
            url: "function.php",
            data: "",
            cache: true,
            success: function(html){
                $("#dynamicDiv").html(html);
            }
        });      
    }

    function noMoreTikets(){
        clearInterval(checkInterval);
        window.location.replace("http://www.google.com");
    }
</script>

//定时器每秒钟触发一次该功能
var checkInterval=setInterval(函数(){
支票票();
},1000);
函数checkTicket(){
$.ajax({
类型:“POST”,
url:“function.php”,
数据:“,
是的,
成功:函数(html){
$(“#dynamicDiv”).html(html);
}
});      
}
函数noMoreTikets(){
clearInterval(检查间隔);
window.location.replace(“http://www.google.com");
}
在function.php中:

// Remove the "function is_ticket_able($conn){" function wrapper.
// Define $conn... Or include the file where it is defined.

// I assume that your query lookup works.

$query = "select number_of_tickets from [dbo].[TICKETS_LKUP] " ;
$stmt = sqlsrv_query($conn, $query);
while ($row = sqlsrv_fetch_array($stmt)) {
    $ticket = $row['number_of_tickets'];
}

// Add this instead of a return.
if($ticket>0){
    echo "There is still some tickets!";    // Text that will show in "dynamicDiv"
}else{
    ?>
    <script>
        $(document).ready(function(){
            noMoreTikets();
        });
    </script>
    <?php
}
//删除“函数是可票证的($conn){”函数包装器。
//定义$conn…或包含定义它的文件。
//我假设您的查询查找工作正常。
$query=“从[dbo].[tickets\u LKUP]中选择票证数量”;
$stmt=sqlsrv_查询($conn,$query);
while($row=sqlsrv\u fetch\u数组($stmt)){
$ticket=$row[“票数”];
}
//添加此项而不是返回。
如果($ticket>0){
echo“还有一些票证!”;//将在“dynamicDiv”中显示的文本
}否则{
?>
$(文档).ready(函数(){
noMoreTikets();
});

有几件事。所以,我不需要
onkey
?另外,我需要ticket变量来确保不是0…我可以在任何我想要的地方使用它吗?最后,我听说有了Ajax,我需要
echo
函数上的一些内容(强制
echo
)?