سؤال

الآن هنا وضعي:أنا أقوم بإنشاء نظام إدارة المحتوى (CMS).عند النقر على الروابط، أرغب في تحميل الصفحات ديناميكيًا باستخدام Ajax.المشكلة في الروابط!

الطريقة الوحيدة لتغيير العنوان في شريط العناوين في الوقت الفعلي هي استخدام علامات الربط.لكن PHP لا تحصل على علامات الربط، وبالتالي لا يمكنني تحميل محتوى الصفحة عند تحميل الموقع باستخدام PHP.وإذا كنت سأقوم بتحميل الصفحات باستخدام سلسلة استعلام، فلن يمكن تحديث سلسلة الاستعلام في شريط العناوين عند النقر على الرابط، لأن ذلك سيؤدي إلى إعادة تحميل الصفحة.

أفترض أن جافا سكريبت يمكنها التحقق من العنوان وحفظ علامة الارتساء في ملف تعريف الارتباط وإعادة تحميل الصفحة، لكنني أفضل ألا أضطر إلى بذل مثل هذه الجهود.

لا أحد يعرف حل لهذه المشكلة؟

هل كانت مفيدة؟

المحلول

كان هناك سؤال مماثل منذ وقت ليس ببعيد، وتوصلت إلى الحل التالي.

يجب أن تشير عناوين URL الخاصة بك إلى صفحات حقيقية حتى تتمكن من العمل مع مستخدمي JS المعوقين.يجب أن تتعامل معالجات النقر مع طلبات ajax.يجب أن يحتوي التجزئة على عنوان URL وجزء مثل &ajax للإشارة إلى نوع الطلب.

إذا كان الطلب من ajax فما عليك سوى إرسال المحتوى.إذا لم يكن الأمر كذلك، فقم بلف المحتوى في الرأس والتذييل للرد بموقع كامل.

يجب أن تعمل عناوين URL مع الارتباط بالتجزئة التي تم إنشاؤها باستخدام ajax واستخدامها كروابط.الفكرة بأكملها تحاكي في الأساس نوع السلوك الذي يمكنك رؤيته على الفيسبوك.

جافا سكريبت

// 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;

}

نصائح أخرى

I can see why you might want to load parts of the page with ajax. A whole page is rather pointless though.

A jQuery solution might be something like:

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

I have in no way tested that, but it should still work without javascript enabled.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top