0

これが私の状況です。私はCMSを作成しています。リンクをクリックすると、Ajaxを使用してページを動的にロードしたいと思います。リンクの問題!

アドレスバーのアドレスをリアルタイムで変更する唯一の方法は、アンカータグを使用することです。しかし、PHPはアンカータグを取得しないため、PHPを使用してサイトロード時にページコンテンツをロードすることはできません。また、クエリ文字列を使用してページを読み込む場合、リンクをクリックしたときにアドレスバーでクエリ文字列を更新できませんでした。これは、ページが再読み込みされるためです。

Javascriptでアドレスを確認し、アンカータグをCookieに保存してページをリロードできると思いますが、そのような長さにする必要はありません。

誰かがこの問題の解決策を知っていますか?

4

2 に答える 2

3

少し前に似たような質問があり、私は次の解決策を思いつきました。

jsが無効なユーザーが使用できるようにするには、URLが実際のページを指している必要があります。クリックハンドラーはajaxリクエストを処理する必要があります。ハッシュには、URLと&ajax、リクエストのタイプを示すような部分が含まれている必要があります。

リクエストがajaxからのものである場合は、コンテンツを送信するだけです。そうでない場合は、コンテンツをヘッダーとフッターにラップして、完全なサイトで応答します。

URLは、ajaxで生成されたハッシュにリンクし、それらをリンクとして使用する必要があります。全体的なアイデアは、基本的にFacebookで見られるような動作を模倣しています。

Javascript

// click handler for ajax links
function goToWithAjax(hash) {
  hash = hash.href ? hash.getAttribute("href", 2) : hash;
  ajax( hash, function( response ) {
    document.getElementById("content").innerHTML = response;
  });
  hash = ("#!/" + hash).replace("//","/");
  window.location.hash = hash;
  return false;
}

.htaccess

auto_prepend_file = "prepend.php"  
auto_append_file  = "append.php"  

付加する

$url   = $_SERVER['REQUEST_URI'];
$parts = explode('#!', $url);
$hash  = isset($parts[1]) ? $parts[1] : false;

// redirect if there is a hash part
if ($hash) {
  header("Location: $hash");
}

// find out if it's an ajax request
$ajax = strstr($url, "&ajax");

// we need header if it's not ajax
if (!$ajax) {
  get_header();
}

追加

// we need footer if it's not ajax
if (!$ajax) {
  get_footer();
}

get_header()

function get_header() {

echo <<< END
<html>
<head></head>
<body>
<div id="page">
  <div id="header">
    <div id="logo"></div>
    <ul id="nav">menu...</ul>
  </div>
  <div id="content">
END;

}

get_footer()

function get_footer() {

echo <<< END
  </div> <!-- end of #content --->
  <div id="footer">(c) me</footer>
</div> <!-- end of #page --->
</body>
</html>
END;

}
于 2010-07-14T23:25:24.023 に答える
0

ページの一部をajaxでロードしたい理由がわかります。ただし、ページ全体はかなり無意味です。

jQueryソリューションは次のようになります。

$(a.ajax_link).click(function(){
  var url = $(this).attr('href');
  $.ajax({
    url:url,
    success:function(data) {
      $('body').html(data);
      return false;
    }
  });
});

私はそれをテストしたことはありませんが、JavaScriptを有効にしなくても動作するはずです。

于 2010-07-15T01:53:51.107 に答える