ajax-post-json-php - xhr向php获取请求后如何避免重写覆盖当前页面
迷茫
迷茫 2017-04-10 15:02:11
[PHP讨论组]

如题,用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 nav;//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('li'); var achor = document.createElement('a'); if(i == 0){ navLi.className = 'onav_top onav_logo'; achor.setAttribute('href','#'); var spanX = document.createElement('span'); spanX.className = 'onav_yellow'; spanX.innerHTML = 'Sci-Fi'; achor.appendChild(spanX); var spanY = document.createElement('span'); spanY.className = 'onav_white'; spanY.innerHTML = '.Net'; achor.appendChild(spanY); }else{ navLi.className = 'onav_top'; achor.setAttribute('href','#'); achor.setAttribute('target','_blank'); achor.setAttribute('title',menuLst[i]); achor.innerHTML = menuLst[i]; } navLi.appendChild(achor); navUl.appendChild(navLi); }; var navp = document.getElementById('onav_wrapper'); navp.appendChild(navUl); //need to be brief var oAhor = document.getElementById('onav_bar').getElementsByTagName('a'); for (i=0; i

}

烦请大神帮忙解答一下;

新手!!

多谢啦!

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
巴扎黑

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

大家讲道理

换jquery append()方法试一下

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号