jQuery:在.each()中使用.ajax()

时间:2011-11-24 11:50:14

标签: jquery

我在页面上有一个RSS链接/ URL列表,我试图使用jQuery的.each功能循环。在该循环内部我试图使用.ajax功能将链接发送到将运行的php页面,然后返回1表示成功或0表示失败。我的.ajax'成功'功能将使用此1或0将页面上链接的颜色更改为绿色(如果成功)和红色(如果不成功)。

以下是我的代码不起作用。这有什么问题?

jQuery(document).ready(function($) {

    $('#fetch_rss').click(
        function() {

            $('tr.rssrow').each(
                function() {

                    var link = $('a.rsslink', this).attr('feed_link');

                    $.ajax({
                        url: "rss_process.php",
                        type: "POST",
                        data: {'link':link},
                        success: function(msg) {
                            if (msg > 1) {
                                $('td.link', this).addClass('green');
                            } else {
                                $('td.link', this).addClass('green');
                            } 

                        },
                        fail: function(msg) {
                            $('td.link', this).addClass('orange');
                        }
                    });

                } // .each callback
            ); // .each
        } // .click callback
    ); // .click

});

1 个答案:

答案 0 :(得分:1)

这个内部的ajax回调并没有引用原来的这个。

您应该将此添加到首选项的$ .ajax()哈希值中:

context : this

请参阅the jQuery docs

上的“上下文”

您的代码出现的另一个问题是,您经常使用此代码而不是$(this)。例如:

var link = $('a.rsslink', this).attr('feed_link');

应写成:

var link = $('a.rsslink', $(this)).attr('feed_link');

同样的:

$('td.link', this).addClass('green');

应该是:

$('td.link', $(this)).addClass('green');

还有其他地方你也这样做。

另一件事。以下内容始终将类“green”添加到td.link:

if (msg > 1) {
  $('td.link', this).addClass('green');
} else {
  $('td.link', this).addClass('green');
}

你应该用其他类来对待else部分(橙色?)。