Re: [問題] ajax函式化回傳數值
※ 引述《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
03/21 23:48, 1F
→
03/21 23:49, , 2F
03/21 23:49, 2F
推
03/24 22:27, , 3F
03/24 22:27, 3F
推
03/25 18:18, , 4F
03/25 18:18, 4F
→
03/25 18:19, , 5F
03/25 18:19, 5F
→
03/25 18:19, , 6F
03/25 18:19, 6F
推
04/05 13:31, , 7F
04/05 13:31, 7F
→
04/05 13:32, , 8F
04/05 13:32, 8F
討論串 (同標題文章)
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章