Javascript 从函数返回 xmlhttp responseText 作为返回
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12421860/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
returning xmlhttp responseText from function as return
提问by inogbox
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 :
我是 javascript 和 php 新手,我的目标是:从 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>
回答by jAndy
You can't.
你不能。
Neither runs the code syncronous, nor would you returnanything to loadXMLDocbut to the anonymous function which is the onreadystatechangehandler.
既不同步运行代码,也不会对作为onreadystatechange处理程序的匿名函数执行return任何操作。loadXMLDoc
Your best shot is to pass a callback function.
你最好的办法是传递一个回调函数。
function loadXMLDoc(myurl, cb)
{
// Fallback to Microsoft.XMLHTTP if XMLHttpRequest does not exist.
var xhr = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
if (typeof cb === 'function') cb(xhr.responseText);
}
}
xhr.open("GET", myurl, true);
xhr.send();
}
And then call it like
然后称之为
loadXMLDoc('/foobar.php', function(responseText) {
// do something with the responseText here
});
回答by austincheney
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>

