我是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>
答案 0 :(得分:10)
你不能。
既不运行代码同步,也不会return
向loadXMLDoc
运行任何内容,而是运行 onreadystatechange 处理程序的匿名函数。
最好的方法是通过回调函数。
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();
}
然后将其称为
loadXMLDoc('/foobar.php', function(responseText) {
// do something with the responseText here
});
答案 1 :(得分:4)
只需返回responseText属性或将其值赋给闭包中的变量。
返回一个值:
<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>
使用闭包:
<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>