2012-04-29 14 views
0

私はJavascriptとjQueryの初心者で、次のコードと結果に困惑しています。jquery ajaxコールバック変数のスコープ(スコープ内とその他のスコープが異なる理由)

なぜ私のゴルファーの名前は範囲にありますが、私のteam_idは範囲外ですか?そして私はそれをどのように修正するのですか? 配列のように見え、コールバックでは利用できない配列要素と等しい変数が設定されています。

jQueryのコード#testdivから

function submit_pick(sender) { 
    var names = sender.attr('name').split('-'); 
    var team_id = names[0]; 
    var tournament_id = names[1]; 
    var pick_number = names[2]; 
    var golfer_id = sender.val(); 
    var golfer_name = sender.find("option:selected").text(); 
    var senders_parent = sender.parent().get(0); 
    sender.remove(); 
    $(senders_parent).html('submitting pick...'); 
    jQuery("#testdiv").append("submit pick before ajax request: "+names+', '+team_id+', '+tournament_id+', '+pick_number+', '+golfer_id+', '+golfer_name+'<br />'); 
    jQuery.post(fantasy_golf.ajaxurl, 
       {'action' : 'insert_pick', 
       'team_id' : team_id, 
       'tournament_id' : tournament_id, 
       'pick_number' : pick_number, 
       'golfer_id' : golfer_id 
       }, 
       function(response) { 
        if (response) { 
         jQuery("#testdiv").append("submit pick after response: "+names+', '+team_id+', '+tournament_id+', '+pick_number+', '+golfer_id+', '+golfer_name+'<br />'); 
        } 
       }, 
       'text' 
    ); 
} 

結果

submit pick before ajax request: 10,2,1, 10, 2, 1, 22, Aaron Baddeley 
submit pick after response: undefined, undefined, undefined, undefined, 22, Aaron Baddeley 
+1

元のコードに誤植はありませんか?コードは私にとっては大丈夫なようです。 – JoshuaBoshi

+0

'response'の内容は何ですか? – Chopin

+0

元のコードには 'jQuery("#testdiv ")の後に追加の行が含まれていました。 –

答えて

0

私はそれが面白い(もともとコメントアウトされていない)コードのコメントアウト行にもかかわらず、上記のエラーの原因となったことがわかります彼らはコードの問題のラインが私が思ったものの後でした。

私の質問に先立ってコメント行を追加していないことをお詫びします。私はコードをいくつか移動していて、新しいコードを見なければなりませんでした。その点以上の問題が発生します。

ありがとうございました。

function submit_pick(sender) { 
    var names = sender.attr('name').split('-'); 
    jQuery("#testdiv").append(sender.attr('name')+"<br />"); 
    var team_id = names[0]; 
    var tournament_id = names[1]; 
    var pick_number = names[2]; 
    var golfer_id = sender.val(); 
    var golfer_name = sender.find("option:selected").text(); 
    var senders_parent = sender.parent().get(0); 
    sender.remove(); 
    $(senders_parent).html('submitting pick...'); 
    jQuery("#testdiv").append("submit pick before ajax request: "+names+', '+team_id+', '+tournament_id+', '+pick_number+', '+golfer_id+', '+golfer_name+'<br />'); 
    jQuery.post(fantasy_golf.ajaxurl, 
       {'action' : 'insert_pick', 
       'team_id' : team_id, 
       'tournament_id' : tournament_id, 
       'pick_number' : pick_number, 
       'golfer_id' : golfer_id 
       }, 
       function(response) { 
        if (response) { 
         jQuery("#testdiv").append("submit pick after response: "+names+', '+team_id+', '+tournament_id+', '+pick_number+', '+golfer_id+', '+golfer_name+'<br />'); 
//       var names = $this.attr('id').split('-'); 
//       var pick_id = names[1]; 
//       var team_id = names[2]; 
//       var tournament_id = names[3]; 
//       var pick_number = names[4]; 
        } 
       }, 
       'text' 
    ); 
}