将客户端数据传递给服务器端方法


Passing client data to server-side methods

我有一个JavaScript文件,检查投标使用json数据。

现在我的问题是倒计时插件有一个onExpiry函数,不会让你传递参数,当你做回调是在计数器过期之前调用。在倒计时到期,它应该设置拍卖为获胜,提醒用户,并将他们添加到赢家表。其中大部分是由php处理的,但我所做的函数需要auction_id和用户名传递,但没有传递参数,我无法想到如何做到这一点。这是我目前的代码。

Is Won 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'])
                }
            }
        }); 
    }
}
以下是checkBids()函数返回的Json
[{"i":"5","t":1324374080,"p":"£ 0.13","u":"chrissy"}]

这是最好的方式来创建这个倒计时,还是一个更好,更干净的方式?如果这是最好的方式,我怎么能让所有的功能工作lol:)

您不需要"onExpiry"来传递参数。首先,你可以使用

函数
onExpiry : function(){  isWon(user, auction); }

因此在匿名函数实现中有效地传递参数。但我通常做的只是添加一个隐藏的输入字段

<input id="user_id" type="hidden"/>
<input id="auction_id" type="hidden"/>

和在"isWon"函数中-不获取"user"answers"auction"作为参数,只需执行以下操作

var user_id = $("#user_id").val();
var auction_id =  $("#auction_id").val();

然后用ajax传递给服务器,或者直接用ajax传递,像这样

 $.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"。如果我有你的文件层次结构,我也可以解决这个问题。