我正在尝试从数据库中获取一些数据。我创建了一个位于Canvas.SetRight(ctl)
文件中的函数,它返回一个值。在另一个页面上,我创建一个变量,然后获取该值。我试图使用functions.php
来检查数据库,但后来我意识到我需要知道门票的数量,即使他们没有输入任何东西。
这是功能:
function.php
onkey
并且,我正在尝试检查数据库(不刷新页面)并获取此页面上的值:
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);
是不是0还是1.因为如果是1,那么一些东西必须改变。
我这样做(在application.php中):
$amount_of_tickets
编辑:我看到AJAX是正确使用的,但是我很困惑使用它。
更新
function.php
if($amount_of_tickets !=0){
//show the form and let them apply for tickets.
//also
if($amount_of_tickets == 1){
//just let them apply for one ticket.
}
}
application.php
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_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>
时,它不会提醒数据库中的值,但它会提醒 application.php 内的所有内容...帮助plzzz
答案 0 :(得分:3)
服务器端
假设您需要定期检查$amount_of_tickets
这可以计算到 application.php ,在该文件中您将拥有
<?php
// $conn is defined and set somewhere
$amount_of_tickets = is_ticket_able($conn);
echo $amount_of_tickets;
exit(0);
?>
这样,当使用简单的 GET 请求调用脚本时,该值将作为简单文本在响应中返回。
客户端
ajax 是您想要更新页面信息而无需重新加载的方法。
下面是一个简单的例子(使用jQuery),可以扩展以满足您的需求。
以下代码是一个JavaScript代码段。全局用于存储值(应该避免使用全局变量,但它只是出于示例的目的)
然后调用一个函数,并从 function.php 脚本中获取更新的值。
函数-prior termination-调度自身(setTimeout
)在给定的毫秒数后重新调用(重复获取值进程)。
var global_isTicketAble = 0;
checkTicket();
function checkTicket()
{
$.ajax(
{
url: "application.php",
method: 'GET',
dataType: 'text',
async: true,
success: function( text )
{
global_isTicketAble = text;
// eventually do something here
// with the value just fetched
// (ex. update the data displayed)
setTimeout( checkTicket, 5000 ); // check every 5 sec
}
}
}
请注意$.ajax()
发送请求但不等待响应(因为async
设置为true
)。收到请求后,将执行指定为success
的函数。
完整的jQuery ajax函数文档可以在这里找到
答案 1 :(得分:1)
我假设你有一个页面(application.php)在某处显示一个表。 并且您希望用您在数据库中找到的数据填充该表。
我不确定您希望刷新这些数据的时间。 点击按钮或定期点击(例如错误的5秒)...但是对于我在下面解释的内容并不重要。
在application.php中: 按照您已经知道的方式组装所有页面。
但在其中,有些人只是在你的桌子应该显示的地方插入一个空的div:
<div id="dynamicContent"></div>
还要在页面底部添加此脚本:
<script>
function getData(){
PostData="";
$.ajax({
type: "POST",
url: "function.php",
data: PostData,
cache: true,
success: function(html){
$(Destination).html(html);
}
});
}
getData(); // Trigger it on first page load !
</script>
这里有2个变量......我将它命名为#34; PostData&#34;和&#34;目的地&#34;。
关于PostData:
如果需要,您可以将客户端收集的数据传递给PHP函数。
假设您需要传递用户的名字和姓氏,您可以像这样定义PostData:
Fname=$("#Fname").val(); // user inputs
Lname=$("#Lname").val();
PostData="Fname="+Fname+"&Lname="+Lname;
在你的function.php中,你会像这样检索它(就像任何正常的POST数据一样):
$Fname=$_POST['Fname'];
$Lname=$_POST['Lname'];
如果您不需要将数据从客户端脚本传递到服务器端PHP ...只需将其定义为空。
PostData="";
然后,关于目的地:
这是空的&#34;动态div&#34; id(我把它命名为&#34; dynamicContent&#34;上面)
不要忘记一个id的标签(#)或一个类的点
这是一个jQuery选择器
所以在这里,PostData将被定义如下:
Destination="#dynamicContent";
ajax请求的结果将落入&#34;动态div&#34;。
这将是function.php ..
所以,如果你跟着我,你必须在function.php ...中构建你的表 我的意思是你进行数据库查询和同时获取的部分。
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>";
因此,如果您没有数据,表格将为空 你只能获得表格和表格标题......但是没有行 因此,不需要检查是否存在数据的函数。
最后......关于刷新的触发器:
在application.php中,你可以放一个触发getData()的按钮......或者你可以定义一个setInterval。
它取决于你。
这就是我如何使用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>
在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
}
请记住,您的PHP脚本是在服务器端执行的
这就是为什么你的&#34;返回$ ticket;&#34;没有做任何事情。
在这种调用function.php的ajax方式中,它的脚本是单独执行的,就像单个页面一样,与很久以前执行的application.php没有任何关系。
它生成要提供给客户的文本(或javascript) 如果要将PHP变量传递给客户端javascript,则必须将其作为javascript回显。
所以在这里,如果PHP变量$ ticket大于零,那么一些文字说明仍有可用的门票将显示在&#34; dynamicDiv&#34;并且不会刷新应用程序页面。我想它会显示一个按钮或某些东西,允许学生买票。
否则,它将成为&#34; noMoreTikets()&#34;的javascript触发器。这将落在&#34; dynamicDiv&#34;。