2011-12-20 14 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"は必要ありません。 最初に - あなたはこのように効果的にAnnonymousの機能の実装に引数を渡す機能

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

になかれことができます。 しかし、私は通常、やっていることは、単に非表示の入力フィールド

<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でそれを渡し、または直接ところでので

$.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']) 
       } 
      } 

ようにAJAXでそれを渡す - 「URL」はあなたの例では奇妙であることに注意してください。 "/"で始まり、途中に "index.php"は含まれていないはずです。私があなたのファイル階層を持つことができるなら、私はこれも解決できます。

関連する問題