2011-12-15 129 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) {