作者TonyQ (骨头)
看板Ajax
标题Re: [问题] ajax函式化回传数值
时间Wed Mar 21 20:59:35 2007
※ 引述《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)
1F:推 ayuiop:详尽的解说,非常感谢 我是上上礼拜才开始碰类似js形式语 03/21 23:48
2F:→ ayuiop:言的,看来我还需要多多历练XD 03/21 23:49
3F:推 ayuiop:後来我发现用物件存参数的方式原理和161篇很有关系:P 03/24 22:27
4F:推 TonyQ:呵 是呀, 不过平常这种leak极微小可以忽略, 03/25 18:18
5F:→ TonyQ:而且做完之後,setNull就会被释放了。:P 03/25 18:19
6F:→ TonyQ:Object可以用列举的方式取得,好用太多了。XD 03/25 18:19
7F:推 ayuiop:请问为何需要parseInt(escape(valueObj[i]).length) 04/05 13:31
8F:→ ayuiop:而不直接取用length就好? 04/05 13:32