Как получить время с сервера, используя ajax? - PullRequest
0 голосов
/ 14 июля 2011

Я пытаюсь создать такой сайт, как аукцион на пенни, как отобразить время обратного отсчета? я пробовал это с помощью ajax, но иногда он глотает одну или две секунды, он показывает секунды как 10,9,7,6,3 ... я имею в виду, что он не показывает правильное время обратного отсчета .. пожалуйста, помогите мне решить эта проблема

вот мой код

<?php 
@session_start();
include "includes/common.php";
include_once "includes/classes/class.Auction.php";
$objAuction     = new Auction();
$result=$objAuction -> getStatus();
echo $result;

?>

// код ajax

function getStatusOne(pId)

{

var strURL="get_status_one.php?pId="+pId;
var req = getXMLHTTP();

if (req) 
{           
    req.onreadystatechange = function() 
    {
        if (req.readyState == 4) 
        {   
            if (req.status == 200) 
            {       
                  //alert(req.responseText);
                var result= req.responseText.substr(1).split("|");

                for (var x = 0; x < result.length; x++)
                {

                    var resultN=result[x].split(",");

                    var prId=resultN[0];

                    var temp=resultN[1];
                    var sec=parseInt(temp);


                    var price=resultN[2];
                    //alert(prId+' '+temp+' '+price);
                    var mem=resultN[3];
                    var img=resultN[4];
                    var autobid=resultN[5];
                    if(img=='') {
                        img='images/profile/no_image.jpg'
                    }
                    if(!price)
                    {
                        price='0.00';
                    }
                    if(!mem)
                    {
                        mem='No Bidders Yet';
                    }

                    if(document.getElementById("bid_price"+prId))
                    {   

                        document.getElementById("bid_price"+prId).innerHTML='$'+price;
                        document.getElementById("bidder_name"+prId).innerHTML=mem;
                        document.getElementById("userimg").src=img;
                        document.getElementById("bid_rate").innerHtml=autobid;

                         if(sec<= -1)
                        {

                                sold(prId);
                                if(document.getElementById('end'+pId))
                                {
                                    document.getElementById('end'+pId).style.display="block";
                                }
                                if(document.getElementById('div_bid_image'))
                                {
                                    document.getElementById('div_bid_image').style.display="none";
                                }   
                                if(document.getElementById('clsBidB'+pId))
                                {                                       
                                    document.getElementById('clsBidB'+pId).style.display="none";    
                                }
                        } 
                        else {
                            if(document.getElementById('div_bid_image').style.display == "none")
                            {
                                document.getElementById('div_bid_image').style.display="block";
                            }
                            if(sec >=0)
                            {
                                SetCountdownText(sec,"div_timer"+prId,prId);
                            }
                        }
                    }
                }

            } 
            else 
            {
                //alert("There was a problem while using XMLHTTP:\n" + req.statusText);
            }               
        }
    }       
    req.open("POST", strURL, true);

    req.send(null);
}

}

// php код для расчета времени

    function getStatus()
{

    $selProd="select a.pdt_id, unix_timestamp(a.end_date) - unix_timestamp('".date('Y-m-d H:i:s')."') as seconds, b.bid_price,c.uname  from tbl_products a left join tbl_auction b on a.pdt_id=b.product_id left join tbl_members c on  b.member_id=c.member_id where(select unix_timestamp(a.end_date) - unix_timestamp('".date('Y-m-d H:i:s')."'))>= 0 ";

    if($this->ExecuteQuery($selProd,"norows") > 0)
    { 

        $auctionArr=$this->ExecuteQuery($selProd,"select");

        $auctionName=$this->array2str($auctionArr);
    }
    return $auctionName;
}

function array2str($array,$level=1) 
{
    $str = array();
    foreach($array as $key=>$value) {
     if(is_int($key))
     {
        $nkey = $key;
        $nvalue = is_array($value)?'|'.$this->array2str( $value ) : $value;
        $str[] = $nvalue;
    }
    }       
     return implode(',',$str);

}

Ответы [ 4 ]

1 голос
/ 14 июля 2011

Предположим, у вас есть что-то вроде DIV с идентификатором «обратный отсчет» (для отображения обратного отсчета):

Пример JavaScript (предполагается использование jQuery - рекомендуется):

(function(jQuery) {
    updateCountdown("countdown"); // Call on page load
    var countdown = setInterval('updateCountdown("countdown")', 1000); // Update countdown every second
})(jQuery);

function updateCountdown(elementId) {
    jQuery.ajax({       
        url: "/ajax/countdown.php?auctionId=123", 
        type: "GET",
        dataType: "json",
        success: function(response) {
            // Insert value into target element
            jQuery("#"+elementId).html(response["timeRemaining"]);

            // Stop countdown when complete
            if (response["countdownComplete"] == true)
            clearInterval(countdown);
        }
    });
}

Пример PHP-скрипта (предполагается, что он находится в /ajax/countdown.php вышеупомянутым JavaScript):

<? php
/* Insert your own logic here */
$response["timeRemaining"] = "5 seconds";
$response["countdownComplete"] = false; // Set to true when countdown complete
echo json_encode(response);
?>

Я бы рекомендовал выполнять все вычисления на стороне сервера (в PHP), поскольку он действительно отлично обрабатывает время / дату (с большим количеством встроенных методов) и требует меньше кода для реализации в целом.

1 голос
/ 14 июля 2011

попробуйте

<?php

$target = mktime(0, 0, 0, 14, 07, 2011) ;

$today = time () ;

$difference =($target-$today) ;

$days =(int) ($difference/86400) ;

print "Our event will occur in $days days";

?>
0 голосов
/ 14 июля 2011

Зачем вам нужен Ajax для отображения времени обратного отсчета?Почему вы не можете просто отобразить его, когда страница загружается вместе с остальными данными?

0 голосов
/ 14 июля 2011

Сделайте, чтобы страница PHP отображала время обратного отсчета. А затем используйте что-то вроде AJAX HTTP-запроса jQuery для этой страницы и где-то заполните ответ в элементе DOM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...