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

问题描述:

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