2012-04-29 2 views
0

Я новичок в Javascript и jQuery и озадачен следующим кодом и результатами.jquery ajax callback variable scope (почему некоторые в области видимости и другие нет)

Почему мое имя golfer_ в сфере видимости, но мой team_id не в области? И как мне это исправить? Кажется, это массив, а переменные установлены равными элементу массива, которые недоступны в обратном вызове.

JQuery код

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' 
    ); 
} 

Результаты от #testdiv

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

Что такое «ответ»? – Chopin

+0

Исходный код содержал дополнительные строки после 'jQuery (« # testdiv »). Append (« submit pick after response ... », как только я прокомментировал эти строки, мой код, как указано выше, работает. –

ответ

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' 
    ); 
}