Синтаксис 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.

Другие вопросы по тегам