gpt4 book ai didi

javascript - 没有请求和响应冲突的多个 ajax 请求

转载 作者:行者123 更新时间:2023-11-30 18:41:31 24 4
gpt4 key购买 nike

我经常遇到多个 ajax 请求的问题,我倾向于发送这些请求来获取数据以刷新网页的不同组件。我总是使用我的自定义 ajax 函数(在下面共享)来执行 ajax 调用。而且我发现这些请求有时会发生冲突。我还确保以两秒的间隔发送请求,希望它能序列化我发送请求的方式。我仍然发现它有时会发生碰撞。我究竟做错了什么?或者更确切地说,我可以对我的功能做哪些更改以使其每次都能无缝运行?

函数:

function get_xmlhttp_obj()
{
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert(invalidbrowser);
}
}
}
return xmlHttp;
}

function passUrl(url1)
{
url1 = url1+"&sid="+Math.random();
xmlHttp=get_xmlhttp_obj();
xmlHttp.onreadystatechange = function() { stateChanged(xmlHttp); };
xmlHttp.open("GET", url1, true);
xmlHttp.send(null);
}


function passposturl(url1,params)
{
xmlHttp=get_xmlhttp_obj();
xmlHttp.open("POST", url1, true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.onreadystatechange = function() { stateChanged(xmlHttp); };
xml Http.send(params);
}

function stateChanged(xmlHttp)
{
if (xmlHttp.readyState == 1 || xmlHttp.readyState == 2 || xmlHttp.readyState == 3 || xmlHttp.readyState == 0)
{
// Wait state. I load loading text or image here
}
else if(xmlHttp.readyState == 4)
{
// catch the response and display in the specific container.
if(loadflag=="global_live_xjournal_feed")
{
document.getElementById("global_live_xjournal_feed").innerHTML=xmlHttp.responseText;
setTimeout("call_refresh_global_xjournal_feed", 5000);
}
}
}


function call_refresh_global_xjournal_feed(obj)
{
if(obj=="global_xjournal_feed")
{
var url = "ajax_activity_feed.php?id="+obj;
passUrl(url);
loadflag="global_live_xjournal_feed";
}
}

最佳答案

如果您想确保您的异步调用以串行方式执行,您始终可以使用在回调中具有 setTimeout() 的递归异步调用。例如:

function DoSomething() {
$.get('/ajax/call', function() {
//do whatever
setTimeout(DoSomething, 2000);
}
}

在这个例子中,我使用的是 jQuery 示例,但您可以使用 $.get() 轻松切换您的函数。

这样,在第一个异步调用完成之前,您永远不会启动另一个异步调用。它可能会比 2 秒长一点,但一切都会串行运行。

关于javascript - 没有请求和响应冲突的多个 ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6740876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com