function processAjaxStateChangeForRowAdd() {
alert(0);
if (req.readyState == 4) { // Complete
if (req.status == 200) { // OK response
processForRowAdd(req.responseText);
} else {
alert("Problem: " + req.statusText);
}
}
}
此代码适用于IE,Safari和Firefox,但如果删除alert
,则代码将无法在Firefox中运行,但仍可在IE和Safari中使用。
有人可以给我一些建议吗?为什么它在没有警报的情况下无法在Firefox中运行?
编辑:添加一行的代码:
if (window.XMLHttpRequest && browserVersion.indexOf("Microsoft") == -1 ) {
// code for Firefox, Chrome, Opera, Safari
req = new XMLHttpRequest("");
if (req) {
ajaxProcessed = false;
req.onreadystatechange = processAjaxStateChangeForRowAdd;
req.open("POST", url, true);
req.send();
// alert("1");
}
}
答案 0 :(得分:3)
alert
正在阻止。这意味着您的脚本暂时被暂停(即使它只有几毫秒)。在此期间,您的AJAX请求完成,并且您的req
对象正在设置中。您可以在回调中添加延迟(使用setTimeout)来验证这一点。
我建议您发布更多脚本,以便我们可以帮助您正确设置回调。或者,使用诸如jQuery之类的库来轻松地以跨浏览器方式设置AJAX调用。
编辑:您需要将req
声明为全局变量,或使用匿名函数。以下代码演示了第一种方法(使用全局变量):
var req;
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
if (req) {
req.onreadystatechange = processAjaxStateChangeForRowAdd;
req.open("POST", url, true);
req.send();
}
}
function processAjaxStateChangeForRowAdd() {
if (req.readyState == 4) { // Complete
if (req.status == 200) { // OK response
processForRowAdd(req.responseText);
} else {
alert("Problem: " + req.statusText);
}
}
}
答案 1 :(得分:1)
function getHttp()
{
var xmlhttp;
try
{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
if(typeof XMLHttpRequest != 'undefiend')
{
xmlhttp = new XMLHttpRequest();
}
}
}
return xmlhttp;
}
答案 2 :(得分:0)
if (request.readyState == 4) {
if (request.status == 200) {
var response = request.responseText;
} else
alert("status: " + request.status);
}
答案 3 :(得分:0)
您还应检查readyState,以下代码可能有帮助
req.onreadystatechange=function()
{
if (req.readyState==4 && req.status==200)
{
processForRowAdd(req.responseText)
}
}
读取this以获取readyState
的不同值