This question already has an answer here:
这个问题已经有了答案:
- How do I return the response from an asynchronous call? 30 answers
- 如何从异步调用返回响应?30的答案
im new in javascript and php , my goal is :RETURN string from xmlhttp responseText to a function return value.So i can use it with innerText or innerHTML method. the html code :
我的目标是:从xmlhttp responseText返回字符串到函数的返回值。我可以用innerText或者innerHTML方法。html代码:
<script>
function loadXMLDoc(myurl){
var xmlhttp;
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();}
else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
xmlhttp.responseText;}
}
xmlhttp.open("GET",myurl,true);
xmlhttp.send();
}
</script>
2 个解决方案
#1
6
You can't.
你不能。
Neither runs the code syncronous, nor would you return
anything to loadXMLDoc
but to the anonymous function which is the onreadystatechange handler.
既不运行代码同步,也不返回任何内容到loadXMLDoc,而是返回到匿名函数(onreadystatechange处理程序)。
Your best shot is to pass a callback function.
最好的方法是传递回调函数。
function loadXMLDoc(myurl, cb){
var xmlhttp;
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();}
else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
if( typeof cb === 'function' )
cb(xmlhttp.responseText);
}
}
xmlhttp.open("GET",myurl,true);
xmlhttp.send();
}
And then call it like
然后这样称呼它
loadXMLDoc('/foobar.php', function(responseText) {
// do something with the responseText here
});
#2
4
Just return the responseText property or assign its value to a variable in closure.
只需返回responseText属性或将其值赋给闭包中的变量。
Returning a value:
返回一个值:
<script>
function loadXMLDoc(myurl) {
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
return xmlhttp.responseText;
}
}
xmlhttp.open("GET", myurl, true);
xmlhttp.send();
return xmlhttp.onreadystatechange();
}
</script>
Using a closure:
使用闭包:
<script>
var myValue = "",
loadXMLDoc = function (myurl) {
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
return xmlhttp.responseText;
}
}
xmlhttp.open("GET", myurl, true);
xmlhttp.send();
myValue = xmlhttp.onreadystatechange();
};
</script>
#1
6
You can't.
你不能。
Neither runs the code syncronous, nor would you return
anything to loadXMLDoc
but to the anonymous function which is the onreadystatechange handler.
既不运行代码同步,也不返回任何内容到loadXMLDoc,而是返回到匿名函数(onreadystatechange处理程序)。
Your best shot is to pass a callback function.
最好的方法是传递回调函数。
function loadXMLDoc(myurl, cb){
var xmlhttp;
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();}
else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
if( typeof cb === 'function' )
cb(xmlhttp.responseText);
}
}
xmlhttp.open("GET",myurl,true);
xmlhttp.send();
}
And then call it like
然后这样称呼它
loadXMLDoc('/foobar.php', function(responseText) {
// do something with the responseText here
});
#2
4
Just return the responseText property or assign its value to a variable in closure.
只需返回responseText属性或将其值赋给闭包中的变量。
Returning a value:
返回一个值:
<script>
function loadXMLDoc(myurl) {
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
return xmlhttp.responseText;
}
}
xmlhttp.open("GET", myurl, true);
xmlhttp.send();
return xmlhttp.onreadystatechange();
}
</script>
Using a closure:
使用闭包:
<script>
var myValue = "",
loadXMLDoc = function (myurl) {
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
return xmlhttp.responseText;
}
}
xmlhttp.open("GET", myurl, true);
xmlhttp.send();
myValue = xmlhttp.onreadystatechange();
};
</script>