2016-07-01 6 views
0

Я создал сценарий ajax, который вызывает страницу, заданную в div #container, поэтому, если я вызываю страницу project.html, запрос работает хорошо, вызывая страницу и $getscript ассоциировать, но если я пытаюсь перезвонить мою домашнюю страницу запросы являются дубликатом:Ajax request duplicate на странице call back

enter image description here

Существует мой PHP функция:

<?php $d="pages/" ; if(isset($_GET[ 'p'])){ $p=strtolower($_GET[ 'p']); if(preg_match("/^[a-z0-9\-]+$/",$p) && file_exists($d.$p. ".html")){ include $d.$p. ".html"; } else{ include $d. "404.html"; } } else{ include $d. "home.html"; } ?>

и это мой Аякса запрос:

var afficher = function(data, page) { 
 

 
    $('#container').fadeOut(500, function() { 
 
     $('#container').empty(); 
 
     $('#container').append(data); 
 
\t \t 
 
     $('#container').fadeIn(100, function() {}); 
 

 
    }); 
 
}; 
 

 
var loadPage = function(page, storeHistory) { 
 
    if (typeof storeHistory === 'undefined') { 
 
     storeHistory = true; 
 
    } 
 

 
    $.ajax({ 
 
     url: 'pages/' + page, 
 
     cache: false, 
 
     success: function(html) { 
 
      afficher(html, page); 
 
      if (storeHistory === true) { 
 
       history.pushState({ 
 
        'key': 'value', 
 
        'url': page 
 
       }, '', page); 
 
      } 
 
     }, 
 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
 
      afficher('erreur lors du chagement de la page'); 
 
     } 
 
    }); 
 

 
    return false; 
 
}; 
 

 
window.addEventListener('load', function() { 
 
    setTimeout(function() { 
 
     window.addEventListener('popstate', function(e) { 
 
      if (e.state === null) { 
 
       loadPage('home.html'); 
 
      } else { 
 
       loadPage(e['state']['url'], false); 
 
      } 
 
     }); 
 
    }, 0); 
 
}); 
 

 
$(document).ready(function() { 
 
\t $('.project a').on('click', function(e) { 
 
     var page = $(this).attr('href'); 
 
     loadPage(page); 
 
     return false; 
 
    }); 
 

 
\t $('#menu a').on('click', function() { 
 
     var page = $(this).attr('href'); 
 
     loadPage(page); 
 
     return false; 
 
    }); 
 
    
 
});

Как я могу решить эту проблему множественного запроса, когда я называю мою домашнюю страницу?

ответ

2

Проблема здесь как-то событие получает добавление снова и снова. Одно температурное решение и предлагаемое решение будут состоять в том, чтобы прервать предыдущий ajax каждый раз, когда вы вызываете другой ajax. Так может быть:

var lastRequest = null; 
if(lastRequest!=null){ 
lastRequest.abort(); 
} 
lastRequest = $.ajax({ 
//your code 
    }); 

Итак, таким образом будет только один активный ajax за раз.

Надеюсь, что это поможет.

+0

, который работает для первого вызова ajax, но проблема возвращается – Tiaw

+0

Проблема возникает даже после отмены? –

+0

да проблема идет – Tiaw