设置Interval和Ajax

时间:2011-12-15 14:04:28

标签: php jquery ajax json setinterval

我的jquery不是自动刷新,使用以下代码,是否有任何问题(seeBelow)。我基本上希望它检查是否有新的出价,然后更新html:)

编辑:

function checkBids(){
    var id = $('div.auction').attr('id') 
    $.ajax({
        url: 'http://localhost/tinybid/index.php/auction/auctiondata',
        dataType: 'json',
        success: function(json){
                if (json['i'] = 'product'+id) {
                    $('li.user').html(json['u']);
                    $('li.curPrice').html(json['p']);
                }
            }
    }); 
}

$(document).ready(function() {
    setInterval(checkBids, 1000);
});

这是拍卖数据 -

function auctiondata(){
        $this->load->model('Auction_model', 'Auction');
        $this->load->model('Bid_model', 'Bid');
        $this->load->model('Customer_model', 'Customer');

        $auctions = $this->Auction->getAllAuctions();

        foreach ($auctions as $auction){
            $lastBid = $this->Bid->getLastBid($auction['auction_id']);
            $user = $this->Customer->getUserById($lastBid['user_id']);
            $bid = strtotime($lastBid['end_time']);

            $json[] = array(
                'i' => $auction['auction_id'],
                't' => $bid,
                'p' => '£ '.$auction['current_price'],
                'u' => $user['username']
            );  
        }

        echo json_encode($json);
    }

编辑15:13 15/12/2011: 这是数据的json输出: [{“i”:“1”,“t”:1323961871,“p”:“£0.23”,“u”:“joe2011uk”},{“i”:“2”,“t”:1323957557,“ p“:”£0.03“,”你“:”joe2011uk“}]

该页面显示i:1,

的上一个出价

仍未更新

任何人都可以帮忙,谢谢你的时间

凯瑞:)

3 个答案:

答案 0 :(得分:3)

您需要从()传递给checkBids的方式中移除setInterval

通过使用()后缀函数名称,您调用 checkBids,并将返回值传递给setInterval - 在您的情况下null 1}}(因为你不会在任何时候调用return)。这将导致checkBids被调用一次,并且只被调用一次。

一个函数就像Javascript中的任何其他“值”(对象)一样 - 你传递它就像你对字符串或数字一样。

可以执行@Shvelo建议并使用您使用的语法,但将其包装在引号中以将其转换为字符串。但是,不应该执行此操作 - 这实际上意味着setInterval对您传递的字符串调用eval(),这是低效且容易出错的。 JSLint也不会喜欢你这样做。

更改

setInterval(checkBids(), 1000);

setInterval(checkBids, 1000);

此外,交换两个代码段 - 您应该在尝试在任何地方使用它之前定义您的功能。

修改

经过长时间的讨论,我你想在你的成功函数中做到这一点。

如果您为个人拍卖<div>提供auction<id>个ID,其中<id>json['i']中返回的数字ID,请执行以下操作:

 // ...
 success: function(json) {
   for (var i = 0; i < json.length; i++) {
     $('#auction'+json[i]['i']+' li.user').html(json[i]['u']);
     $('#auction'+json[i]['i']+' li.curPrice').html(json[i]['p']);
   }
 }
 // ...

认为它应该做你想做的事。

答案 1 :(得分:0)

您正在使用checkBids()的{​​{1}}值,实际上是return
使用null

答案 2 :(得分:0)

 setInterval(checkBids(), 1000);
使用引号(呃,使用eval)或包装:

会更好
setInterval(function(){checkBids();}, 1000); 

略微修复您的语法:

if (json['i'] = 'product'+id) {

应该是

if (json['i'] == 'product'+id) {

if (json['i'] === 'product'+id) {