Javascript 为什么沙漏不能在Google Chrome中处理同步AJAX请求?
我正在执行一个函数,首先将光标设置为等待状态(沙漏),然后发送一个同步AJAX请求。得到响应后,我将光标设置为默认状态 实际代码如下 //测试smtp设置 函数TestSettings() { var buttonpams=新对象() } 函数SendForm(pButtonParams) { var-http; var格式数据Javascript 为什么沙漏不能在Google Chrome中处理同步AJAX请求?,javascript,ajax,google-chrome,Javascript,Ajax,Google Chrome,我正在执行一个函数,首先将光标设置为等待状态(沙漏),然后发送一个同步AJAX请求。得到响应后,我将光标设置为默认状态 实际代码如下 //测试smtp设置 函数TestSettings() { var buttonpams=新对象() } 函数SendForm(pButtonParams) { var-http; var格式数据 http = yXMLHttpRequest(); http.open("POST", "./", false); http.setRequestHeader("Co
http = yXMLHttpRequest();
http.open("POST", "./", false);
http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
http.setRequestHeader("Req-Type", "ajax");
formdata = xEncodePair("_object", "PrefMgr")+ "&";
formdata += xEncodePair("_action", "SmtpTest")+ "&";
formdata += GetEncodedFormData();
http.send(formdata);
if(http.status == 200)
{
if(pButtonParams.IsCommandButton == true)
HandleButtonStatus(false, pButtonParams);
return (http.responseText);
}
else
{
return ("Error " + http.status + ": " + http.statusText);
}
}
功能手柄按钮状态(pIsButtonStatusChange,pButtonSParams)
{
var-button=yById(pButtonParams.ButtonId)
}尝试分配:
var st = document.body.style;
然后参考两个功能中的st
。这可能是AJAX回调函数的作用域问题
编辑:使用回调函数恢复光标形状。如果AJAX调用失败,请不要忘记执行同样的操作。尝试分配:
var st = document.body.style;
然后参考两个功能中的st
。这可能是AJAX回调函数的作用域问题
编辑:使用回调函数恢复光标形状。如果AJAX调用失败,不要忘记执行同样的操作。请不要使用同步AJAX请求。他们将锁定浏览器,直到请求完成。请不要使用同步AJAX请求。他们将锁定浏览器,直到请求完成。耶..现在工作正常..但还有一个问题。。我正在创建一个对象,然后让游标等待我的应用程序。如果我正在创建它,那么沙漏在谷歌浏览器中也不起作用。如果我对CREATEOBJECT语句进行注释,那么hour glass正在工作。为什么?我将更新给定的代码。我认为您应该提供完整的代码或此函数。有一件事和其他事情有关,现在我明白了。请求函数是一个经典的闭包。当您创建var obj时,您将创建一个全局上下文,以防止
request
函数指针释放。它的工作原理如下:首先调用request'函数时,它会按预期工作,发送AJAX请求。在AJAX完成时,
request`函数的上下文不再存在,除非您通过在外部范围中定义obj
来保留它,从而创建一个闭包。即使是同步AJAX调用也可以通过回调函数异步工作。您最好在回调函数中设置光标(使用onstatechange),而不是在请求中设置光标。对不起,我可能会把您弄糊涂。我正在发布我编写的实际代码。我认为Google Chrome可以异步(即在单独的线程中)执行所有XHR,即使它设置为同步。尝试将所有操作移动到onreadystatechange
callback function.ya..现在工作正常..但还有一个问题。。我正在创建一个对象,然后让游标等待我的应用程序。如果我正在创建它,那么沙漏在谷歌浏览器中也不起作用。如果我对CREATEOBJECT语句进行注释,那么hour glass正在工作。为什么?我将更新给定的代码。我认为您应该提供完整的代码或此函数。有一件事和其他事情有关,现在我明白了。请求函数是一个经典的闭包。当您创建var obj时,您将创建一个全局上下文,以防止request
函数指针释放。它的工作原理如下:首先调用request'函数时,它会按预期工作,发送AJAX请求。在AJAX完成时,
request`函数的上下文不再存在,除非您通过在外部范围中定义obj
来保留它,从而创建一个闭包。即使是同步AJAX调用也可以通过回调函数异步工作。您最好在回调函数中设置光标(使用onstatechange),而不是在请求中设置光标。对不起,我可能会把您弄糊涂。我正在发布我编写的实际代码。我认为Google Chrome可以异步(即在单独的线程中)执行所有XHR,即使它设置为同步。尝试将所有操作移动到onreadystatechange
回调函数。
var st = document.body.style;