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 return
anything to loadXMLDoc
but 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>