Ajax рдХреЛ VKontakte рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдкреГрд╖реНрда рд▓реЛрдб рдХрд░реЗрдВ

рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдХреИрд╕реЗ VKontakte рдХреА рддрд░рд╣ ajax рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреЗрдЬ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕реА рд╕рдордп рд╕рд░реНрдЪ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдореИрдВрдиреЗ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ JS jQuery рдлреНрд░реЗрдорд╡рд░реНрдХ ( рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдБ ) рдФрд░ HashChange рдкреНрд▓рдЧрдЗрди ( рдкреНрд▓рдЧрдЗрди рдкреЗрдЬ рдкрд░ рдЬрд╛рдПрдБ ) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдИ рдереАред

рдореИрдВрдиреЗ рдЬреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓рд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛, рд╡рд╣ рдкреГрд╖реНрда рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреНрд▓рдЧ рдерд╛ рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдкреЗрдЬ рд╣реИрд╢ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░реИрдХ рдХрд░реЗрдЧрд╛:

рдХрдиреЗрдХреНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
<script type="text/javascript" src="/js/jquery.js"></script> <script type="text/javascript" src="/js/hashchange.js"></script> 


рд╕рдорд╛рд░реЛрд╣:
  $jQuery = jQuery.noConflict(); $jQuery(window).hashchange(function(){ var link = window.location.hash.replace("#", ""); get_page_by_hash(link); }); 


рдпрд╣ рдлрд╝рдВрдХреНрд╢рди get_page_by_hash рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдкреГрд╖реНрда рдХрд╛ рд╣реИрд╢ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдкреГрд╖реНрда рдХрд╛ рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛ред

рджреВрд╕рд░рд╛ рдЪрд░рдг рдореИрдВрдиреЗ get_page_by_hash рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ рдмрдирд╛рдпрд╛:

  function get_page_by_hash(link){ if(typeof(link) != "undefined"){ if(link != ""){ $jQuery.ajax({ type: "POST", cache: false, async: false, url: link, success: function(data){ if(data != ""){ $jQuery("body").html(data); } } }); } } } 


рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдЖрдкрдХреЗ рд╢рд░реАрд░ рдореЗрдВ HTML рдХреЛ HTML рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдЖрдпрд╛ рдерд╛ред
1. рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреА рд╡рд┐рдзрд┐ - рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП POST рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рд╕рд┐рд░реНрдл рдкреЗрдЬ рдкрд░ рдЧрдП рд╣реИрдВ рдпрд╛ рдпрд╣ ajax рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрдиреБрд░реЛрдз рд╣реИред рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА:

 if($_SERVER["REQUEST_METHOD"] == "GET"){ } 


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк HTML рдХреЛ рдЯреИрдЧ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдКрдкрд░ рдмрддрд╛рдИ рдЧрдИ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдЯреНрд░рд┐рдо рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИред

рдЕрдЧрд▓рд╛ рдЪрд░рдг рдЙрд╕ рдкреГрд╖реНрда рдХрд╛ рд╣реИрд╢ рд╕реЗрдЯ рдХрд░рдирд╛ рдерд╛ рдЬрд┐рд╕реЗ рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░реИрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

 $jQuery("a").click(function(){ if($jQuery(this).attr("href").substr(0, 1) == "/"){ window.location.hash = $jQuery(this).attr("href"); } }); 


рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рд╣реИрд╢ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕рднреА рдиреЗ рдпрд╣ рднреА рджреЗрдЦрд╛ рдХрд┐ рдореЛрдЬрд╝рд┐рд▓рд╛ рдФрд░ рдХреНрд░реЛрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ VKontakte рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдкрддрд╛ рдмрджрд▓рддрд╛ рд╣реИ, рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ рдФрд░ рдХрджрдо рдЙрдард╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

1. рдЖрдкрдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 function getNameBrouser() { var userAgent = navigator.userAgent.toLowerCase(); //  Internet Explorer if (userAgent.indexOf("msie") != -1 && userAgent.indexOf("opera") == -1 && userAgent.indexOf("webtv") == -1) { return "msie"; } // Opera if (userAgent.indexOf("opera") != -1) { return "opera"; } // Gecko = Mozilla + Firefox + Netscape if (userAgent.indexOf("gecko") != -1) { return "gecko"; } // Safari,   MAC OS if (userAgent.indexOf("safari") != -1) { return "safari"; } // Konqueror,   UNIX- if (userAgent.indexOf("konqueror") != -1) { return "konqueror"; } return "unknown"; } 


2. рдЕрдм рд╣рдореЗрдВ рдкреГрд╖реНрда рдХреЗ рд╣реИрд╢ рдЕрдкрдбреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 $jQuery("a").click(function(){ if($jQuery(this).attr("href").substr(0, 1) == "/"){ if(getNameBrouser() == "gecko"){ window.history.pushState("", "", $jQuery(this).attr("href")); window.history.replaceState("", "", $jQuery(this).attr("href")); get_page_by_hash($jQuery(this).attr("href")); }else{ window.location.hash = $jQuery(this).attr("href"); } return false; } }); 


рдЗрди рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдкрдХреЗ рдкрд╛рд╕ VKontakte.ru рдХреЗ рд╕рдорд╛рди (рдкреГрд╖реНрда рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЗрдВ) рдПрдХ рд╕рд╛рдЗрдЯ рд╣реЛрдЧреА

Source: https://habr.com/ru/post/In128552/


All Articles