JavaScript Ajax PHP 做异步显示问题

2015-08-15 21:41:28 +08:00
 eoo
我要实现的功能是: 按下按钮后触发 JavaScript 执行Ajax 向PHP后台查询数据 然后返回给JavaScript进行 一条一条的显示出来, 今天想了一天 蛮子都要炸了,完全不懂JavaScript 都是现学现用,JS帮我看看吧。


带上飞机: http://v.milog.cn/ajax/
代码如下:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<meta name="viewport" content="width=device-width,
initial-scale=1.0,
maximum-scale=1.0,
user-scalable=0" />
<meta http-equiv=Cache-Control content=no-cache />
<title>测试</title>
<!--JavaScript代码-->
<script type="text/javascript">
i=0;

function go(){
//document.getElementById("txt").innerHTML="<div style='margin:50% auto;text-align:center'>努力加载中...</div>";

if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}


<!-- Ajax POST请求-->
var url=document.getElementById("url").value;
var go_url = "mysqli.php";
xmlhttp.open("POST",go_url,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("url="+url);


xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {



var eoo =xmlhttp.responseText;


type(eoo);



}
}
}


function type(eoo){

var str = eoo.split('<>');

//document.getElementById("str").innerHTML += '<div>'+str[i];

txt.innerHTML += '<div>' + str[i] + '</div>';

i++;

if(i>=str.length) return;

setTimeout("type(str)",100);

}


</script>

<!--CSS代码-->
<style type="text/css">
pre{
white-space: pre; /* CSS 2.0 */
white-space: pre-wrap; /* CSS 2.1 */
white-space: pre-line; /* CSS 3.0 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: -moz-pre-wrap !important; /* Mozilla */
white-space: -hp-pre-wrap; /* HP Printers */
word-wrap: break-word;
}

.header {
text-align:center;
//width:100%;
background-color:#FAEBD7;
padding:10px 20px;
margin:auto;
}

input {
border: 1px dashed #666;
}

</style>
</head>
<body>
<div class="header">
<input type="text" id="url" value="" / >
<button type="button" onclick="ql()">清除</button>
<button type="button" onclick="go()">抓取</button></div>
<div id="txt"></div>
</body>
</html>
3705 次点击
所在节点    JavaScript
30 条回复
8qwe24657913
2015-08-16 12:57:05 +08:00
@eoo 起晚了……已改,个人意见如果兼容古老ie的话jq还是挺有用的,可以省掉写ie兼容的时间……
8qwe24657913
2015-08-16 13:57:47 +08:00
@eoo 不过我是本着尽量少改代码的原则的,要我重写的话估计会变成

这样吧……

不过这个说到底还是等数据全部加载完毕之后再延时一条一条显示,如果需要服务端echo一次输出一次的话参考https://web-tinker.com/article/20047.html
eoo
2015-08-16 14:02:24 +08:00
@8qwe24657913 你真厉害,我的偶像啊, 你扣扣多少 能加一下吗?
8qwe24657913
2015-08-16 14:13:01 +08:00
@eoo 并不厉害_(:з」∠)_而且我那张图真要用的话估计polyfill得比业务代码多不知多少倍……
eoo
2015-08-16 14:21:20 +08:00
@8qwe24657913 不过还有个小问题,就是在输出完后 再点 就会再输出 一个undefined 这个如何解决?


你给我推荐的那篇文章就是传说中的 反Ajax吧? 这个需要在服务端做死循环 感觉普通的虚拟主机会受不鸟。
8qwe24657913
2015-08-16 16:36:11 +08:00
@eoo 所以我问过你需不需要点第二次……已改

那个死循环只是为了演示,正确用法是echo 耗时操作 echo这样,是为了边加载边显示,不耗时就没多大意义了……

好吧我可能是搞错了你的想法,估计你只是想做个逐行显示的效果愉♂悦一下用户:joy:

题外话 comet和websocket乖乖交给node.js,php写=作死
eoo
2015-08-16 18:22:10 +08:00
@8qwe24657913 谢谢你的耐心解答,灰常感谢。
21grams
2015-08-16 19:40:30 +08:00
这年头没人会写野生JavaScript了吗
eoo
2015-08-16 20:42:44 +08:00
@21grams 我写的不就是了吗?
strwei
2015-08-16 23:28:21 +08:00
打酱油

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/213459

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX