作者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