我的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,
的上一个出价仍未更新
任何人都可以帮忙,谢谢你的时间
凯瑞:)答案 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) {