【问题标题】:Ajax request duplicate on page call back页面回调上的 Ajax 请求重复
【发布时间】:2016-07-01 15:37:33
【问题描述】:

我制作了一个 ajax 脚本,调用 php 中 #container div 中询问的页面,所以如果我调用 project.html 页面,请求运行良好,调用页面和 $getscript 关联但如果我尝试回调我的主页请求是重复的:

还有我的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"; } ?>

这是我的 ajax 请求:

var afficher = function(data, page) {

    $('#container').fadeOut(500, function() {
        $('#container').empty();
        $('#container').append(data);
		
        $('#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() {
	 $('.project a').on('click', function(e) {
        var page = $(this).attr('href');
        loadPage(page);
        return false;
    });

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

如何解决调用主页时多次请求的问题?

【问题讨论】:

    标签: jquery ajax request multiplication


    【解决方案1】:

    这里的问题是事件被一次又一次地添加。一个临时解决方案和建议的解决方案是每次调用另一个 ajax 时中止以前的 ajax。所以它可以是:

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

    所以,通过这种方式,一次只有一个活动的 ajax。

    希望对您有所帮助。

    【讨论】:

    • 第一个ajax回调工作但问题又回来了
    • 即使在中止之后也会出现问题吗?
    • 实际上只有在单击“#menu a”时才会出现问题,onpopstate 请求运行良好
    • 我想我遇到了多个请求的问题,当通过 onClick 事件调用 loadPage 时,一个请求正在执行,而当窗口加载事件列表器被调用时,第二个请求正在执行
    • 你能不能把事件语句改成$('#menu a').bind('click',function(){..... 并且在那个$('#菜单 a').unbind();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2011-02-27
    相关资源
    最近更新 更多