开溜!
我在javascript中使用xmlhttprequest,调用php页面。 php页面只回显一个字符串。
当xmlhttprequest命中4 200时,响应文本将保存为字符串。此外,xmlhttprequest位于函数中,该函数返回响应文本。
问题:函数正在返回undefined
,但我通过添加alert(string)
来规避错误。然后警报声明'undefined',函数在返回时传递回显值,AS字符串!
使用Opera,Chrome,Firefox和Internet Explorer,只有FF和IE填充响应文本。 Opera和Chrome根本不起作用。
代码:
function xmlhttpr(help,type,address)
{
var string;
if ( help )
{
string = 'The xmlhttpr function:<br>params: (help,type,address)
<br>as<br>false/true,<br>get/post,<br>/addr.ess?h=elp';
return string;
}
if ( !address )
{
string = 'Parameter missing in xmlhttpr(0,type,address)';
return string;
}
if ( type == 0 )
{
type = 'GET';
}
if (type == 1 )
{
type = 'POST';
}
if ( window.XMLHttpRequest )
{
xmlhttp = new XMLHttpRequest();
}
else
{
xmlhttp = new ActiveXObject( "Microsoft.XMLHTTP" );
}
xmlhttp.onreadystatechange = function()
{
//alert(this.readyState + ' ' + this.status);
if ( this.readyState==4 && this.status==200 )
{
string = this.responseText;
}
}
xmlhttp.open( type , address , true );
xmlhttp.send();
alert(string); //STINKY
if ( string )
{
return string;
}
else
{
return 'Request failure';
}
}
答案 0 :(得分:0)
XMLHttpRequest也称为AJAX,A代表异步,当你调用.send()
向服务器发出请求但浏览器没有等待请求完成时,它会直接跳转到下一行,即alert(string)
并且由于请求尚未完成,因此未定义它是很自然的。
所有AJAX请求本质上都是异步的,这意味着浏览器在.send
之后跳转到下一行之前永远不会等待请求完成。
现在在你的情况下很难建立你的功能所以最好完全删除这个功能,无论你在哪里调用该函数,只需执行请求,在onreadystatechanged
里面if
你有你的字符串所以你要做什么(向用户显示,处理,等等)。
顺便说一下,有一个同步的XMLHttpRequest,但它已被弃用,不应该被使用,因为javascript代码自然地在一个线程甚至UI代码中执行,你不想挂起按钮等待服务器完成的某些请求。
所以它在FF和IE中工作了吗?!!它是巧合的,因为请求恰好完成,字符串恰好被填充。