2011-12-20 200 views
0

我有一個使用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"}] 

這是對的最佳方式創造這個倒計時,還是更好,更清潔的方式? 如果這是最好的方式,我怎麼能得到的功能,所有工作大聲笑:)

回答

0

你不需要「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」。如果我可以有你的文件層次結構,我也可以解決這個問題。

相關問題