2011-12-15 57 views
0

我的jQuery不自动刷新,使用下面的代码,是否有任何问题(请参阅下文)。我基本上希望它检查是否有新的出价已被放置,然后更新HTML :)设置间隔和Ajax

编辑:

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); 
}); 

这里是auctiondata -

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); 
    } 

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

网页显示先前竞购我:1,

仍然没有更新

谁能帮助,感谢您的时间

克里:)

回答

3

您需要删除()从你通过checkBidssetInterval

通过与()后面添加函数名,你是调用checkBids,和返回值传递给setInterval - 这在null你的情况(因为你没有在任何时候拨打return)。这将导致checkBids被调用一次,并且只会调用一次。

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

可以做什么@Shvelo建议和使用你使用的语法,但用引号将它包装成一个字符串。但是,你不应该做到这一点 - 这实际上意味着setInterval调用eval()您传递的字符串,这是效率低下,容易出错。 JSLint不会像你这样做。

变化

setInterval(checkBids(), 1000); 

setInterval(checkBids, 1000); 

此外,交换你的两个代码段周围 - 你试图在任何地方使用它之前,你应该定义你的函数。

编辑

下经过长时间的讨论,我觉得要做到这一点在你成功的功能。

如果你给你的个人拍卖<div> S的auction<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']); 
    } 
} 
// ... 

认为它应该做你想要什么。

+0

确定我有这方面的工作下来if语句笑GRRRR! – user1100010 2011-12-15 16:24:40

+0

`我有这个工作到if语句` - 你的意思是`它现在工作,因为if语句错了`或`我有这个工作,直到我到达if语句`?基本上,它是固定的吗? :) – DaveRandom 2011-12-15 16:26:38

0

您使用checkBids()“小号return值,这实际上是null
使用setInterval('checkBids()', 1000);

+0

检查投标不应该被返回null也不应该被sumthing不对马PHP是一个还没有注意到:S用单引号更新 – user1100010 2011-12-15 14:12:36

0

setInterval(checkBids(), 1000); 

可与任一报价(啊,使用eval)或包裹好:

setInterval(function(){checkBids();}, 1000); 

轻微修正到你的语法:

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

应该

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

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