Синтаксис jQuery 1.5 AJAX
Я изучаю новый синтаксис обратного вызова jQuery $.ajax.
В: Если я перевожу req.success за пределы функции $('td.showcities'). Click, то как мне обратиться к $tr?
// When the user clicks on a state, the list of cities will appear.
$('td.showcities').click(function(){
var $tr = $(this).closest('tr');
var StateID = $tr.data('StateID');
var StateName = $(this).next().text();
var req = $.ajax({
url: 'Remote/City.cfc?queryFormat=column'
,data: {
method:'WhereStateID'
,returnformat:'json'
,StateID:StateID
}
});
req.success(function(result){
$('.highlight').removeClass('highlight');
$('.err').removeClass('err');
if (result.MSG == '') {
$tr.addClass('highlight');
var qryCity = result.qry.DATA; // Normalize
qryCity.RecordCount = result.qry.ROWCOUNT; // Normalize
qryCity.ColumnList = result.qry.COLUMNS; // Normalize
var TableData = '';
for (var i = 0; i < qryCity.RecordCount; i++) {
TableData
+='<tr data-CityID="' + qryCity.CITYID[i] + '">'
+ '<td>' + qryCity.CITYNAME[i] + '</td>'
+ '</tr>';
};
$('#cities tbody').empty().append(TableData);
$('#cities thead th').text(StateName);
} else {
$tr.addClass('err');
$('#msg').text(result.MSG).addClass('err');
};
});
});
2 ответа
Решение
Среди множества различных вещей, которые вы можете сделать, возможно, наиболее удобным является $tr
переменная как context
вариант вашего ajax
вызов:
var req = $.ajax({
url: 'Remote/City.cfc?queryFormat=column'
,data: {
method:'WhereStateID'
,returnformat:'json'
,StateID:StateID
},
context: $tr
});
В вашем успешном обратном вызове значение $tr
станет this
переменная:
req.success(success);
...
function success(result){
$('.highlight').removeClass('highlight');
$('.err').removeClass('err');
if (result.MSG == '') {
this.addClass('highlight'); // <---
...
Вы можете найти этот пост полезным. Это объясняет новый отложенный / обещающий API AJAX в jQuery 1.5.