Re: [問題] ajax函式化回傳數值

看板Ajax作者 (骨頭)時間17年前 (2007/03/21 20:59), 編輯推噓4(404)
留言8則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《ayuiop (美加航空公司)》之銘言: : 我是只有看一點w3schools.com的說明的ajax新手 : 我寫了這樣的script : == : function ajax(method,des,tf,send) : { : var text : var xmlHttp=ajaxFunction(); : if(xmlHttp){ : xmlHttp.onreadystatechange=function(){ : if(xmlHttp.readyState==4){ : text=xmlHttp.responseText; : //return txt 這裡return不出去,會return sub 而非function : } : } 底下的ajax()說的是你寫的function :) 因為 xmlHttp.onreadystatechange() 和 ajax() 是不同步的 所以你不能透過ajax() 去取得回傳的內容。 簡單來說,你的ajax已經執行到最後一行的時候, 你的 onReadyStateChange 應該還沒執行完, 而且 onReadyStateChange() , return的當然是要透過xmlHttp去呼叫才會取得。 比方說 function test(){ var c =new function(){ return "hi"; } c(); //並不等同於在這裡寫 return "hi" } 這樣並不會造成test取得"hi"這個回傳值, 所以你的 onReadyStateChange() 並不會回傳值給你的ajax(); 重點是也沒有必要。@@ ──────────────────────────────── 但是你可以改寫成這樣。 xmlHttp.onreadystatechange=function(){ if(xmlHttp.readyState==4){ text=xmlHttp.responseText; document.getElementById('mes').innerHTML=txt; } } 或者像我是寫成這樣。 http://tony1223.no-ip.info/mylib/AJAX_tony1223.js 使用範例 /* 這區用來擺參數 , [name]=value */ var pointObj=new Object(); pointObj['mapGroup']=1; pointObj['name']=name; /* 此處寫網頁沒有出error時的處理流程 */ var cb_ok=function(response){ document.getElementById("msg").innerHTML=response; }; /* 此處寫 無法顯示網頁 等 error的處理流程 */ var cb_err=function(state,str){ document.getElementById("msg").innerHTML='新增時發生錯誤!!錯誤代碼:' +state+'<br />'+unescape(str)); } send_AJAX_Form("XXX.asp",pointObj,"POST",cb_ok,cb_err); /*url*/ /*values*/ /*method*/ /*POST or GET */ : xmlHttp.open(method,des,tf); : xmlHttp.send(send); : return text //這裡return會變成未定義 : } : } : function f(){ : txt=ajax("GET","test.php",true,null); : document.getElementById('mes').innerHTML=txt; : } : == : 我可以確定我的ajaxFunction沒有錯誤 : 我從firebug可以看到我的responseText確實是我所需要的 : 但是我的document.getElementById('mes').innerHTML=txt; : 這裡面的txt卻是undefined : 看起來好像是網路傳輸會lag的關係 : 請問該怎麼解決這個似乎很基本的問題呢... -- String temp="relax"; | Life just like programing while(buringlife) String.forgot(temp); | to be right or wrong while(sleeping) brain.setMemoryOut(); | need not to say stack.push(life.running); | the compiler will stack.push(scouting.buck()); | answer your life stack.push(bowling.practice()); | Bone everything -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.27.68 ※ 編輯: TonyQ 來自: 220.134.27.68 (03/21 21:00) ※ 編輯: TonyQ 來自: 220.134.27.68 (03/21 21:02)

03/21 23:48, , 1F
詳盡的解說,非常感謝 我是上上禮拜才開始碰類似js形式語
03/21 23:48, 1F

03/21 23:49, , 2F
言的,看來我還需要多多歷練XD
03/21 23:49, 2F

03/24 22:27, , 3F
後來我發現用物件存參數的方式原理和161篇很有關係:P
03/24 22:27, 3F

03/25 18:18, , 4F
呵 是呀, 不過平常這種leak極微小可以忽略,
03/25 18:18, 4F

03/25 18:19, , 5F
而且做完之後,setNull就會被釋放了。:P
03/25 18:19, 5F

03/25 18:19, , 6F
Object可以用列舉的方式取得,好用太多了。XD
03/25 18:19, 6F

04/05 13:31, , 7F
請問為何需要parseInt(escape(valueObj[i]).length)
04/05 13:31, 7F

04/05 13:32, , 8F
而不直接取用length就好?
04/05 13:32, 8F
文章代碼(AID): #160ImvrH (Ajax)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 2 之 3 篇):
文章代碼(AID): #160ImvrH (Ajax)