2011-11-24 9 views
2

jQueryの各機能を使用してループしているページにRSSリンク/ URLのリストがあります。そのループの中で私は実行するphpページへのリンクを送るために.ajax機能を使用しようとしています。そして、成功のために1を、失敗のために0を返します。私の.ajax 'success'関数は、この1または0を使って、ページ上のリンクの色を、成功した場合は緑、失敗した場合は赤に変更します。jQuery:.each()内での.ajax()の使用

以下は動作しないマイコードです。何が問題なの?

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 

}); 
+0

私は間違っているかもしれませんが、通常は文字列を 'data'プロパティに渡す必要があります。 – danyloid

+0

"feed_link"は許可された属性名ではないので、それが問題かどうか疑問に思います。どのような問題が発生しているのかを知る必要があります。また、HTMLとJavascriptを一緒に投稿することも役に立ちます。 – dnuttle

答えて

1

これは、元のthisをajaxコールバックで参照していません。好みの

あなたは$のアヤックスにこれを追加する必要があります()ハッシュ:the jQuery docs

context : this 

を参照してください「文脈」

あなたのコードが悪いのもう一つの事はあなたが頻繁にしているということです

これを$(this)の代わりに使用します。たとえば:

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

は次のようになります。:

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

同じもののため:

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

は次のように書かれるべき

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

は、あなたがしている他の場所がありますこれもやっている。

他にもう1つ。以下は常にtd.linkに "green"クラスを追加します:

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

異なるクラス(オレンジ?)で扱う必要があります。

+0

クリスティンの質問に素早く答えてくれてありがとう!それはそれを修正した。また、 'this'の使用に関するヒントをありがとう。それは知らなかった。 –

+0

あなたは大歓迎です。 –

+0

私の答えを正しいものとしてマークし、上向きの矢印をクリックしてポイントを付けるのであれば、私は感謝します。 :-)ありがとう。 :-) –