1

我正在学习新的 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');
        };
    });
});
4

2 回答 2

1

在您可以做的许多不同的事情中,可能最方便的是将$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'); // <---
    ...
于 2011-02-28T18:15:49.023 回答
1

你可能会发现我的这篇文章很有用。它解释了 jQuery 1.5 中 AJAX 的新延迟/承诺API。

于 2011-02-28T18:39:58.063 回答