首页 > 后端开发 > php教程 > ajax-post-json-xhr向php获取请求后如何避免重写覆盖当前页面

ajax-post-json-xhr向php获取请求后如何避免重写覆盖当前页面

PHP中文网
发布: 2016-06-06 20:42:21
原创
1353 人浏览过

如题,用js向php发送一个请求并加载响应到当前页面的时候,如何避免重写是覆盖当前页面;

具体情况是这样的:
js:

var navLst = {};

var reqInfo   = {};
reqInfo['reqNav']  = true;
reqInfo['reqSin']   = 'qtrfss';   
//more limt options would be added

var  reqSent= JSON.stringify(reqInfo);

var xhr = null;
if(window.XMLHttpRequest){
    xhr = new XMLHttpRequest();
}else{
    xhr = ActiveXObject('Microsoft.XMLHttp');
}

xhr.open('POST', '/themes/ticket/model/echoNav.php',true);
xhr.onreadystatechange=function(){
    if(xhr.readyState == 4) {
        if(xhr.status == 200) {
            try{
                var resp = eval('('+ xhr.responseText +')');
                listMenu(resp);
            }catch(e){
                listMenu(e);
            }
        } else {
            //undo 
        }
    }

};
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('reqSent='+reqSent);
登录后复制

/themes/ticket/model/echoNav.php返回的是一个数组字符串化的json;

然后获取到了menlist,重写的时候整个页面只剩下menulist了。。。
listmenu:

function listMenu(menuLst){

//var menuLst = ['Sci-Fi','home','wiki'];//menu lst should come from php

var nav = ''; 
var navIE = ''+
    ''+
        ''+
    ''+
    ''+
        ''+
    ''+
    ''+
        ''+
    ''+
    ' '+
        ''+
    '';
var navStyle = '';//stylesheet's url

nav +=navIE;
nav +=navStyle;
nav +='';

document.write(nav);

var navUl = document.createElement('ul');
    navUl.id = 'onav_bar';
var navLst = ''
for (var i=0 ;i <= menuLst.length - 1; i++) {
    var navLi = document.createElement(&#39;li&#39;);
    var achor = document.createElement(&#39;a&#39;);
    if(i == 0){
        navLi.className = &#39;onav_top onav_logo&#39;;
            achor.setAttribute(&#39;href&#39;,&#39;#&#39;);
        var spanX = document.createElement(&#39;span&#39;);
            spanX.className = &#39;onav_yellow&#39;;
            spanX.innerHTML = &#39;Sci-Fi&#39;;
        achor.appendChild(spanX);
        var spanY = document.createElement(&#39;span&#39;);
            spanY.className = &#39;onav_white&#39;;
            spanY.innerHTML = &#39;.Net&#39;;
        achor.appendChild(spanY);
    }else{
        navLi.className = &#39;onav_top&#39;;
        achor.setAttribute(&#39;href&#39;,&#39;#&#39;);
        achor.setAttribute(&#39;target&#39;,&#39;_blank&#39;);
        achor.setAttribute(&#39;title&#39;,menuLst[i]);
        achor.innerHTML = menuLst[i];
    }
    navLi.appendChild(achor);   
    navUl.appendChild(navLi);
};
var navDiv = document.getElementById(&#39;onav_wrapper&#39;);
    navDiv.appendChild(navUl);
//need to be brief
var oAhor = document.getElementById(&#39;onav_bar&#39;).getElementsByTagName(&#39;a&#39;);

for (i=0; i<oAhor.length; i++) {
    var testAttr = oAhor[i].parentNode.getAttribute(&#39;class&#39;);
    if (oAhor[i].href == window.location) {
        if (testAttr  === null) {
            oAhor[i].parentNode.setAttribute(&#39;class&#39;, &#39;onav_active&#39;);
        } else{
            oAhor[i].parentNode.setAttribute(&#39;class&#39;, testAttr + &#39; onav_active&#39;);
        }
    }
}
}
登录后复制


解决方案:


document.write(nav); , DOM加载完成后再用document.write()方法会覆盖以前内容。测试一下,把其中函数中的方法换成document.write('')



相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板