Browser XMLHttpRequest响应';未定义'。。。除非先警告变量
混蛋 我在javascript中使用xmlhttprequest,调用php页面。php页面只回显一个字符串 当xmlhttprequest点击4200时,响应文本保存为字符串。另外,xmlhttprequest在一个函数中,该函数返回响应文本 问题:函数返回Browser XMLHttpRequest响应';未定义'。。。除非先警告变量,browser,xmlhttprequest,alert,Browser,Xmlhttprequest,Alert,混蛋 我在javascript中使用xmlhttprequest,调用php页面。php页面只回显一个字符串 当xmlhttprequest点击4200时,响应文本保存为字符串。另外,xmlhttprequest在一个函数中,该函数返回响应文本 问题:函数返回未定义的,但我通过添加一个警报(字符串)绕过了这个错误。然后警报状态为“undefined”,函数在返回时以字符串形式传递回显值 对于Opera、Chrome、Firefox和Internet Explorer,只有FF和IE填充响应文本。
未定义的
,但我通过添加一个警报(字符串)
绕过了这个错误。然后警报状态为“undefined”,函数在返回时以字符串形式传递回显值
对于Opera、Chrome、Firefox和Internet Explorer,只有FF和IE填充响应文本。Opera和Chrome根本不起作用
代码:
函数xmlhttpr(帮助、类型、地址)
{
var字符串;
如果(帮助)
{
字符串='xmlhttpr函数:
参数:(帮助、类型、地址)
作为假/真,
get/post,
/addr.ess?h=elp';
返回字符串;
}
如果(!地址)
{
字符串='xmlhttpr(0,类型,地址)中缺少参数';
返回字符串;
}
如果(类型==0)
{
类型='GET';
}
如果(类型==1)
{
类型='POST';
}
if(window.XMLHttpRequest)
{
xmlhttp=新的XMLHttpRequest();
}
其他的
{
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
//警报(this.readyState+''+this.status);
if(this.readyState==4&&this.status==200)
{
字符串=this.responseText;
}
}
open(类型、地址、true);
xmlhttp.send();
警报(字符串);//臭
如果(字符串)
{
返回字符串;
}
其他的
{
返回“请求失败”;
}
}
XMLHttpRequest也称为AJAX,A代表异步,当您调用.send()
时,请求会发送到服务器,但浏览器不会等待请求完成,它会直接跳到下一行,即警报(字符串)
由于请求尚未完成,因此它自然会被取消定义
所有AJAX请求本质上都是异步的,这意味着浏览器在跳到.send
之后的下一行之前从不等待请求完成
现在,在您的情况下,很难构建您的函数,因此最好完全删除该函数,无论您在何处调用该函数,只需执行请求,并在内部执行onreadystatechanged
,如果您有字符串,请执行您想要执行的操作(向用户显示、处理,等等)
顺便说一句,有同步XMLHttpRequest,但它已被弃用,不应使用,因为javascript代码自然地在一个线程中执行,甚至是UI代码,您不希望挂起按钮等待服务器的某些请求完成
那么它在FF和IE中起作用了?!!这是巧合,因为请求恰好完成,字符串恰好填充。@Blitterator别提了,我建议您阅读浏览器的事件循环
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';
}
}