将客户端数据传递到服务器端方法
问题描述:
我有一个使用json数据检查出价的JavaScript文件。将客户端数据传递到服务器端方法
现在我遇到的问题是倒计时插件有一个onExpiry函数,它不会让你传递参数,当你在计数器到期之前调用回调函数。在倒数到期时,它应该将拍卖设置为Won,提醒用户并将它们添加到获胜者表中。大多数这是由PHP处理,但我所做的功能需要传递auction_id和用户名,但没有传递参数,我不能想到如何做到这一点。这是我目前的代码。
赢PHP函数:
function isWon($user, $auction){
$this->load->model('Auction_model', 'Auction');
$this->load->model('Bid_model', 'Bid');
$this->load->model('Customer_model', 'Customer');
$makeWon = $this->Auction->isWon($auction);
$customer = $this->Customer->getByUsername($user);
if ($makeWon){
$json = array(
'success' => 'Congratulations '.$user.' You have won.',
);
}
echo json_encode($json);
}
Common.Js
function checkBids(){
var id = $('div.auction').attr('id');
$.ajax({
url: 'http://localhost/tinybid/index.php/auction/auctiondata',
dataType: 'json',
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']);
if (typeof json[i]['t'] =='number'){
$('#auction'+json[i]['i']+' li.timer').countdown({until: startTimer(json[i]['i'],json[i]['t']), onExpiry: isWon});
}
}
}
});
}
function startTimer(auction, stamp){
var time= new Date();
time.setTime(stamp*1000);
$('#auction'+auction+' li.timer').countdown('change', {until: time});
}
function isWon(user, auction){
if (user){
$.ajax({
url: 'http://localhost/tinybid/index.php/auction/isWon/'+user+'/'+auction,
dataType: 'json',
success: function(json) {
if (json['success']){
alert(json['success'])
}
}
});
}
}
这里是JSON的上checkBids()函数返回
[{"i":"5","t":1324374080,"p":"£ 0.13","u":"chrissy"}]
这是对的最佳方式创造这个倒计时,还是更好,更清洁的方式? 如果这是最好的方式,我怎么能得到的功能,所有工作大声笑:)
答
你不需要“onExpiry”让你传递参数。 首先 - 你可以送花儿给人的功能
onExpiry : function(){ isWon(user, auction); }
从而有效传递的参数在annonymous功能的实现。 但我通常做的是简单地添加一个隐藏输入字段
<input id="user_id" type="hidden"/>
<input id="auction_id" type="hidden"/>
,并在“isWon”功能 - 而不是让“用户”和“拍卖”作为参数只需做以下
var user_id = $("#user_id").val();
var auction_id = $("#auction_id").val();
然后在阿贾克斯将它传递给服务器,或者直接通过它在阿贾克斯像这样
$.ajax({
url: 'http://localhost/tinybid/index.php/auction/isWon/'+user+'/'+auction,
dataType: 'json',
data:{user_id:$("#user_id").val(), auction_id:$("#auction_id").val()},
success: function(json) {
if (json['success']){
alert(json['success'])
}
}
顺便说一句 - 请注意,“URL”是你的榜样怪异。应该以“/”开头,并且不要在中间包含“index.php”。如果我可以有你的文件层次结构,我也可以解决这个问题。