javascript 事件返回值的传递问题

最近在学习AJAX,遇到这样一个问题。在一个函数中,需要触发一个事件,并且这个事件上要绑定一个函数,代码如下functionajax(target,customquery... 最近在学习AJAX,遇到这样一个问题。
在一个函数中,需要触发一个事件,并且这个事件上要绑定一个函数,代码如下

function ajax(target,customquery,ajaxstr){
var myajax=new XMLHttpRequest();
myajax.open("get",decodeURI(target+"?t="+new Date().getTime()+"&"+customquery),true);
myajax.send();
myajax.onreadystatechange=function(){
if(myajax.readyState==4){
if(myajax.status==200){
ajaxstr=myajax.responseText;
return ajaxstr;
}
}
}
}

在myajax.onreadystatechange这里绑定的函数返回一个值,但是我不知道该怎么去获取它。

最终的目的是直接调用ajax函数,就可以获取到返回的字符串,感谢大家来关注一下吧~
展开
 我来答
百度网友a19d193
2013-05-08 · TA获得超过3446个赞
知道大有可为答主
回答量:1464
采纳率:100%
帮助的人:1451万
展开全部

你还没有深刻理解ajax

异步的ajax实际上使用了单独的进程,因此你无法获取到这个返回值,而且,在你调用ajax()方法时你根本无法知道它什么时候会执行完毕。你应该把你调用并处理ajax的js代码分成两个部分,例如,你的原始思路类似


function d() {

    var target='a.php';

    var query = 'a=1&b=2';

    var ajaxstr = '';

    var result = ajax(target, query, ajaxstr);

    alert(result);

}


那么正确的方式应该为

function d1() {

    var target='a.php';

    var query = 'a=1&b=2';

    var ajaxstr = '';

    var cb = d2;

    ajax(target, query, ajaxstr, cb);

}

function d2(data) {

    alert(data);

}

并修改你的ajax方法为

function ajax(target,customquery,ajaxstr,callback){
    var myajax=new XMLHttpRequest();
    myajax.open("get",decodeURI(target+"?t="+new Date().getTime()+"&"+customquery),true);
    myajax.send();
    myajax.onreadystatechange=function(){
        if(myajax.readyState==4){
            if(myajax.status==200){
                if(callback) {
                    callback(myajax.responseText);
                }  
            }
        }
    }
}


仔细想一下吧,如果有不理解的地方再追问。

更多追问追答
追问
高手额~ ajaxstr 这个参数传递到哪里去了~
追答
这个参数没有意义,return ajaxstr或者不return都一样,对程序来说没有区别。

对于异步的ajax来说,你无法主动的获取其返回值,只能提供回调方法,ajax对象可以将参数传递到你提供的回调方法中,明白?

比如,那个ajaxstr已经作为参数传递给上例中的function d2了,你可以在d2这个函数中查看到它的值。

补充一下吧。事件 总是被触发的,你可以决定当事件发生的时候去做什么,而无法知道事件会在什么时候发生,例如 ,这里的onclick事件你应该能理解吧?ajax其实也是一样的。你只能决定什么时候发送ajax请求,但是ajax请求完成是个事件,你无法知道这个事件何时发生。也就是说,发送ajax请求和ajax请求完成后的后续处理是了两件事,它们之间没有逻辑关系。

这也是刚接触ajax的同学常见的问题,总是认为从发送ajax请求到ajax请求完成是一个完整的过程,可以用程序来控制,然而实际上它们是分开的。过程如下

开发人员编写代码,利用js发送ajax请求
浏览器创建XmlHttpRequest对象来处理该ajax请求
浏览器访问目标地址
浏览器响应目标的反馈
ajax请求完成,触发ajax的onreadystatechange事件
onreadystatechange事件中的js代码被执行,此时控制权才回到开发人员编写的js代码中。

在各种示例中,以上处理都是写在一起的,但是实际上发送ajax请求和处理ajax返回的结果这两件事之间真的一毛钱关系都没有。
百度网友8c438cd
2013-05-08 · 超过24用户采纳过TA的回答
知道答主
回答量:102
采纳率:0%
帮助的人:37.2万
展开全部
<html>
<head>
<script type="text/javascript">
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","/ajax/test1.txt",true);
xmlhttp.send();
}
</script>
</head>
<body>
<div id="myDiv"><h2>Let AJAX change this text</h2></div>
<button type="button" onclick="loadXMLDoc()">通过 AJAX 改变内容</button>
</body>
</html>

这是教程地址:http://www.w3school.com.cn/ajax/ajax_xmlhttprequest_onreadystatechange.asp

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式