作者james54333 (james54333)
看板Web_Design
标题[闲聊] 新手想用javascript读档
时间Sat Nov 2 21:06:51 2013
最近刚开始试着写网页
之所以用javascript是因为只要<script></script>就可以用了
能够直接用记事本写 囧> 之後也可能会要写同步之类的
--
关於读档有稍微爬过文
但是
http://goo.gl/NmRxu这网站看不是很懂= =
我现在是用
http://www.w3schools.com/ajax/default.asp当范例
可以吃到档(xmlhttp.responseText)
但是只限於 xmlhttp.onreadystatechange=function(){} 内
读的档到function外後就不见了
因为我的
主要目的是
读两个档 经过排序後进行比较
如果在function外值就不在的话就无法进行比较
请问有什麽其他方法吗?
或是需要换个语言去写?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.243.253
※ 编辑: james54333 来自: 140.112.243.253 (11/02 21:12)
1F:推 LaPass:停.... 你跳太快了,你先搞懂JAVASCRIPT的域的概念.... 11/02 21:23
3F:→ LaPass:简单来讲就是把变数宣告在function外面 11/02 21:25
--
但是我在function内用 var n=xmlhttp.responseText;
或是 n=xmlhttp.responseText;
在function外都无法读取n的值
而如果是在function外先 var n; 的话
n出了function後一样会是空的呀?
※ 编辑: james54333 来自: 140.112.243.253 (11/02 21:39)
4F:→ danny8376:ajax不是指令下了马上就有资料啊... 11/02 22:10
5F:→ james54333:? 楼上这个我知道阿 11/02 22:23
--
是不是我没讲清楚问题在哪 QQ
function loadXMLDoc()
{
var xmlhttp;
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=
xmlhttp.responseText;
--> 有值
}
}
alert(xmlhttp.responseText); --------------->
会是空的
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();
}
xmlhttp.responseText的值是不是被绑定在
xmlhttp.onreadystatechange=function(){}这个function里面?
在function外 alert(xmlhttp.responseText) 会发现是空的
因为我想要让两笔资料比较
所以想请问有没有方法取出xmlhttp.responseText到
xmlhttp.onreadystatechange=function(){}外面?
如果不行的话是不是有其它做法?
※ 编辑: james54333 来自: 140.112.243.253 (11/02 22:31)
6F:→ danny8376:并没有啊 responseText会在请求成功後一直保留啊 11/02 23:02
7F:→ danny8376:应该是你有地方写错 不过目前的资讯也无法看出问题 11/02 23:04
8F:→ james54333:是喔QQ 我再试试看... 11/02 23:36
9F:→ james54333:如果不用XMLHttpRequest或javascript有推荐的写法吗? 11/02 23:55
10F:→ f1234518456:jquery 11/03 00:08
--
我刚去翻过jquery了 感觉和javascript差不多...
我是用$.get("test.asp",function(data1){ }
我可以很轻松的取出"test.asp"里面的值
但是一样 在$.get(){}外面我依然不能用data1的值阿
$.get("test.asp",function(data1){
alert(data1);
<-- 有值
}
alert(data1);
<-- 没有值
这样我没办法取出来与第二个data做比较耶
请问我有哪里理解错误吗? 还是jquery有其它用法呢?
※ 编辑: james54333 来自: 140.112.243.253 (11/03 01:23)
11F:→ danny8376:如果function的参数能跑出function 不觉得会大乱吗... 11/03 01:42
12F:→ danny8376:不就说过了 丢到一个外面的变数去 11/03 01:43
13F:→ danny8376:看是要function外定义的 还是function里没用var生出来的 11/03 01:43
--
这两种方法我都试过了但是都传不出来
我在第一次回的时候就试过了 刚刚使用jquery测一样不行
在function外面先定义的话 就会取function外定义的值(空的也一样)
在function内不用var 生出来的全域变数在function外依然是空的
※ 编辑: james54333 来自: 140.112.243.253 (11/03 01:56)
14F:推 Fantasywind:你先在 $.get 前面定义变数 var data; 11/03 02:02
15F:→ Fantasywind:response 的 function 里面 -> data = data1 11/03 02:02
16F:→ Fantasywind:下面的就可以取道了 scope 概念请补齐~ 11/03 02:02
--
response 的 function是指 get()
{...} 吗?
如果是的话我真的试过很多次了... 输出结果都是undefined
var data;
$.get("test.asp",function(data1){
data = data1;
alert(data);
<-- 有值
}
alert(data);
<-- undefined
我也用document.getElementById("test").innerHTML=data; 测试过 一样undefined
※ 编辑: james54333 来自: 140.112.243.253 (11/03 02:22)
17F:推 Fantasywind:我蠢了 Ajax 是非同步 所以你下面的alert执行的时候 11/03 02:31
18F:→ Fantasywind:function(data1){} 还没执行 因为还在等待伺服器回应 11/03 02:32
19F:→ Fantasywind:如果你要在外面使用请用一个function存在变数 11/03 02:33
20F:→ Fantasywind:然後再从Response里面去call 11/03 02:33
21F:→ Fantasywind:时间的问题在 ajax 应用很重要 11/03 02:34
22F:→ danny8376:看来并没有完全知道ajax是异步XD 不过还真没注意到 11/03 03:23
23F:→ danny8376:话说正常会用console去下指令测才对吧... 11/03 03:23
24F:→ god11415:$.ajax(...).done(function(datal){data=datal;}); 11/03 05:48
25F:→ james54333:"用一个function存在变数" 这句话我不懂耶 11/03 09:54
26F:→ james54333:我是新手我只会用alert... console还没用过 11/03 09:56
27F:→ james54333:god大的方法我试试看 11/03 09:57
--
var n;
$.ajax({
type:"GET",
url:"test.asp"
}).done(function(datal){
n=datal;
document.getElementById("myDiv").innerHTML=n;
});
document.getElementById("test").innerHTML=n;
可是上面这一行还是会因为异步的关系而没办法直接拿值
有没有方法让他先等.done做完再拿值啊?
.ajax().done()的用法在w3school上没讲得很清楚
我也不知道我这样子用对不对...
很抱歉我真的不知道要怎麽做出两个档案做比较这种效果 QQ
※ 编辑: james54333 来自: 140.112.243.253 (11/03 10:56)
28F:→ danny8376:测试时多个按钮可能太难了 11/03 15:48
31F:→ danny8376:如果要连续取两个档案来比较 11/03 15:54
33F:→ james54333:谢谢danny >< 我会再试试看 11/03 16:14
※ 编辑: james54333 来自: 140.112.243.253 (11/03 16:55)
34F:→ tooto1985:async: false (正解) 11/05 09:01
35F:推 jenesis:去了解一下callback是啥吧~ 11/11 23:44