2011-09-10 12 views
1

私はAjaxサイトをやっていて、私はすべてのURLに "#!"訪問者がURLをクリックしたときに私のサイトから(外部URLのために働かない)家。 http://mysiteajax.com/#!/contact /「"#!"を追加する方法すべてのURLの前にajax

私は小さなスクリプトのjQueryをコード化しているが、それは動作しません。誰かがURL http://mysiteajax.com/contact/をクリック「スクリプトは次のようにURLを変更」:たとえば

<script> 
     var base_url = "http://localhost/ajaxsite/"; 
     function link(href) { 

     // Check if the URL is an internal url 
     if(href.indexOf(base_url) !=-1 || href.indexOf('http://') == -1 || href.indexOf('https://') == -1) { 
     href = href.replace(base_url,''); 
     return base_url + '#!/' + href; 
     } 
     } 

     // Changes the link when someone clicks 
     $(document).ready(function() { 
     $('a').click(function() { 
     $('a').attr('href', link(this)); 
     }); 
     }); 
     </script> 

ことができます私を助けて

はここ

+2

*「動作しません」*:**どのように動作しませんか?何が起こり、何が起こると予想されますか? –

+0

なぜ#!? #はフラグメントマーカーなので、リクエストは指定されたパスに移動しません。 – tjameson

+1

@tjamson:[AJAXクロール:ウェブマスターと開発者のためのガイド](https://www.google.com/support/webmasters/bin /answer.py?answer=174992)。私は彼がフラグメント識別子の値を読んで、そのパス(他の多くのWebページと同じように)を要求すると仮定します。 –

答えて

2

は私が見るいくつかの問題ですありがとう:?

  • コードスニペット
  • にはAjaxはあなたがリンクするアンカータグの要素()、ではないのhref
  • を渡しているクローラは、JS
  • を実行していないので、これはページのクローラには影響を与えませんがありません
  • #と何も、私はあなたがアヤックスどこかに持っていると仮定した場合、これはまだ理由の2と3のために動作しません、サーバー

に渡されることはありませんした後、(あなたのAJAXリクエストがになされるべきであると仮定して根)

これを変更します。これに

$('a').attr('href', link(this)); 

を:

$(this).attr('href', link($(this).attr('href'))); 

これは少し厄介ですが、それは唯一の唯一のjQuery-ISMSを使用して、クリックされた要素を変更する唯一の方法です。

私はあなたがそれをやっているように何らかの理由を見ません。 thisを探しているのであれば、私はGoogleのウェブクローラーがJSを解釈しているとは思わない(クロールを行うには時間がかかりすぎる)。これをHTML自体に入れる必要があります。

+0

はい私はAj​​axでページを呼び出す別のスクリプトを用意しています。 コードはうまくいきますが、リンクを何度かクリックしてアドレスバーで拡大すると、この問題を解決する方法がわかります。 – user938609

+0

ええと、一度だけ電話しますか?私はちょうどクリックの代わりにページの読み込み時にこれを呼び出すでしょう。 – tjameson

関連する問題