[問題] 新手想用javascript讀檔

看板Web_Design作者 (james54333)時間12年前 (2013/11/02 21:06), 編輯推噓1(107)
留言8則, 4人參與, 最新討論串1/1
最近剛開始試著寫網頁 之所以用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)

11/02 21:23, , 1F
停.... 你跳太快了,妳先搞懂JAVASCRIPT的域的概念....
11/02 21:23, 1F

11/02 21:24, , 2F

11/02 21:25, , 3F
簡單來講就是把變數宣告在function外面
11/02 21:25, 3F
-- 但是我在function內用 var n=xmlhttp.responseText; 或是 n=xmlhttp.responseText; 在function外都無法讀取n的值 而如果是在function外先 var n; 的話 n出了function後一樣會是空的呀? ※ 編輯: james54333 來自: 140.112.243.253 (11/02 21:39)

11/02 22:10, , 4F
ajax不是指令下了馬上就有資料啊...
11/02 22:10, 4F

11/02 22:23, , 5F
? 樓上這個我知道阿
11/02 22:23, 5F
-- 是不是我沒講清楚問題在哪 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)

11/02 23:02, , 6F
並沒有啊 responseText會在請求成功後一直保留啊
11/02 23:02, 6F

11/02 23:04, , 7F
應該是你有地方寫錯 不過目前的資訊也無法看出問題
11/02 23:04, 7F

11/02 23:36, , 8F
是喔QQ 我再試試看...
11/02 23:36, 8F

11/02 23:55, , 9F
如果不用XMLHttpRequest或javascript有推薦的寫法嗎?
11/02 23:55, 9F

11/03 00:08, , 10F
jquery
11/03 00:08, 10F
-- 我剛去翻過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)

11/03 01:42, , 11F
如果function的參數能跑出function 不覺得會大亂嗎...
11/03 01:42, 11F

11/03 01:43, , 12F
不就說過了 丟到一個外面的變數去
11/03 01:43, 12F

11/03 01:43, , 13F
看是要function外定義的 還是function裡沒用var生出來的
11/03 01:43, 13F
-- 這兩種方法我都試過了但是都傳不出來 我在第一次回的時候就試過了 剛剛使用jquery測一樣不行 在function外面先定義的話 就會取function外定義的值(空的也一樣) 在function內不用var 生出來的全域變數在function外依然是空的 ※ 編輯: james54333 來自: 140.112.243.253 (11/03 01:56)

11/03 02:02, , 14F
你先在 $.get 前面定義變數 var data;
11/03 02:02, 14F

11/03 02:02, , 15F
response 的 function 裡面 -> data = data1
11/03 02:02, 15F

11/03 02:02, , 16F
下面的就可以取道了 scope 概念請補齊~
11/03 02:02, 16F
-- 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)

11/03 02:31, , 17F
我蠢了 Ajax 是非同步 所以你下面的alert執行的時候
11/03 02:31, 17F

11/03 02:32, , 18F
function(data1){} 還沒執行 因為還在等待伺服器回應
11/03 02:32, 18F

11/03 02:33, , 19F
如果你要在外面使用請用一個function存在變數
11/03 02:33, 19F

11/03 02:33, , 20F
然後再從Response裡面去call
11/03 02:33, 20F

11/03 02:34, , 21F
時間的問題在 ajax 應用很重要
11/03 02:34, 21F

11/03 03:23, , 22F
看來並沒有完全知道ajax是異步XD 不過還真沒注意到
11/03 03:23, 22F

11/03 03:23, , 23F
話說正常會用console去下指令測才對吧...
11/03 03:23, 23F

11/03 05:48, , 24F
$.ajax(...).done(function(datal){data=datal;});
11/03 05:48, 24F

11/03 09:54, , 25F
"用一個function存在變數" 這句話我不懂耶
11/03 09:54, 25F

11/03 09:56, , 26F
我是新手我只會用alert... console還沒用過
11/03 09:56, 26F

11/03 09:57, , 27F
god大的方法我試試看
11/03 09:57, 27F
-- 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)

11/03 15:48, , 28F
測試時多個按鈕可能太難了
11/03 15:48, 28F

11/03 15:48, , 29F

11/03 15:49, , 30F
11/03 15:49, 30F

11/03 15:54, , 31F
如果要連續取兩個檔案來比較
11/03 15:54, 31F

11/03 15:54, , 32F

11/03 16:14, , 33F
謝謝danny >< 我會再試試看
11/03 16:14, 33F
※ 編輯: james54333 來自: 140.112.243.253 (11/03 16:55)

11/05 09:01, , 34F
async: false (正解)
11/05 09:01, 34F

11/11 23:44, , 35F
去了解一下callback是啥吧~
11/11 23:44, 35F
文章代碼(AID): #1ITFZldk (Web_Design)