<script language="javascript" type="text/javascript">
function GetData()
{
var result;
var xmlhttp = create_XML_object();
xmlhttp.open("POST", "/test.aspx", false);
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4)
{
result = xmlhttp.responseText;
}
}
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(null);
return result;
}
</script>
以上基础的ajax调用代码,ajax异步传输在所有浏览器正常,ajax同步传输在IE等其他浏览器中正常,在firefox中的ajax同步传输不会起作用!
究其原因,就是firefox经常打起的标准大旗(可害苦了不少人),firefox中对ajax同步请求是不调用状态改变函数onreadystatechange的,firefox中的ajax同步传输则在xmlhttp.send(null)之后直接使用xmlhttp.responseText便可获取ajax同步传输返回值!那么我们在JS中就先判断浏览器类型,然后调用不同的代码实现ajax同步传输,代码如下:
<script language="javascript" type="text/javascript">
function getOs()
{
var OsObject = "";
if(navigator.userAgent.indexOf("MSIE")>0) {
return "MSIE"; //IE浏览器
}
if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){
return "Firefox"; //Firefox浏览器
}
if(isSafari=navigator.userAgent.indexOf("Safari")>0) {
return "Safari"; //Safan浏览器
}
if(isCamino=navigator.userAgent.indexOf("Camino")>0){
return "Camino"; //Camino浏览器
}
if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0){
return "Gecko"; //Gecko浏览器
}
}
function GetData()
{
var result;
var xmlhttp = create_XML_object();
xmlhttp.open("POST", "/test.aspx", false);
var btype=getOs();
if(btype!="Firefox")
{
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4)
{
result = xmlhttp.responseText;
}
}
}
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(null);
if(btype=="Firefox")
{
result = xmlhttp.responseText;
}
return result;
}
</script>
大功告成,实现在firefox中的ajax同步传输!