it-swarm-ko.tech

먼저 AJAX 요청이 매우 잘 작동하고, 다음에는 너무 많은 시간이 걸립니다.

나는 오랫동안 내 사이트를 ajaxing하고 있습니다.
저에게 적합한 메서드를 찾았지만 첫 번째 AJAX 요청 만 제대로 작동하고 있습니다. 다음 요청에는 시간이 두 배 이상 걸립니다.

모든 요청에 ​​대해 템플릿 파일에서 전체 스크립트를로드하기 때문에 그렇게 작동한다고 생각했습니다. 해당 템플릿 파일에서 print $scripts를 제거했습니다. 그 결과 요청이 이전에 걸리는 시간과 동일합니다.

이것은 내가 사용하는 파일의 내용입니다.

my_ajax.module

function my_ajax_init() {
  drupal_add_js(drupal_get_path('module', 'my_ajax') . '/my_ajax.js');
}

function acquia_slate_preprocess_page(&$vars, $hook) {
  if (isset($_GET['ajax']) && $_GET['ajax'] == 1) {
    $vars['template_files'][] = 'page-ajax';
  }
}

my_ajax.js

Drupal.behaviors.my_ajax = function (context) {
  $('#content-group-inner a').live('click', function (e) {
    $('#content-group-inner a').not('.my_ajax-processed').addClass('my_ajax-processed');
    var url = $(this).attr('href');
    $('#content-region-inner').empty().html('<img src="ajax-loader.gif" style="margin-left:50%;"/>');
    $('#content-region-inner').load(url, 'ajax=1', function () {
      Drupal.attachBehaviors('#content-region-inner');
    });

    return false;
  });
};

페이지 -ajax.tpl.php

<?php print $styles; ?>
<?php print $setting_styles; ?>
<!--[if IE 8]>
  <?php print $ie8_styles; ?>
<![endif]-->
<!--[if IE 7]>
  <?php print $ie7_styles; ?>
<![endif]-->
<!--[if lte IE 6]>
  <?php print $ie6_styles; ?>
<![endif]-->
<?php if ($local_styles): ?>
  <?php print $local_styles; ?>
<?php endif; ?>
<title><?php print $head_title; ?></title>

<?php if (arg(0) != 'admin') { ?>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
  <script type="text/javascript">
    var $jq = jQuery.noConflict();
  </script>
<?php } ?>
<?php  print $scripts; ?>
<a name="main-content-area" id="main-content-area"></a>
<?php print theme('grid_block', $tabs, 'content-tabs'); ?>
<div id="content-inner" class="content-inner block">
  <div id="content-inner-inner" class="content-inner-inner inner clearfix">
    <?php if ($title): ?>
      <h1 class="title"><?php print $title; ?></h1>
    <?php endif; ?>
    <?php if ($content): ?>
      <div id="content-content" class="content-content">
        <?php ?>
        <?php print $content; ?>
        <?php print $feed_icons; ?>
      </div><!-- /content-content -->
    <?php endif; ?>
  </div><!-- /content-inner-inner -->
</div><!-- /content-inner -->
<?php print $closure; ?>
3
dennis605

저에게 적합한 솔루션을 찾았습니다. 방금 변경했습니다.

$('#content-region-inner').load(url, 'ajax=1', function () {
      Drupal.attachBehaviors('#content-region-inner');

그것에 :

var result = $('#content-region-inner:not(.my_ajax-processed)', context)
    .load(url,'ajax=1',function() {
               Drupal.attachBehaviors(result);  

그것을 사용할 때, Drupal 당신이 얼마나 많은 요청을하든 상관없이 한 번에 한 번만 Drupal.attachBehaviors() 실행됩니다.

나는 이것이 당신에게도 효과가 있기를 바랍니다.

2
dennis605