for发送ajax请求,for循环中的Ajax请求(Ajax request in for loop)
for循环中的Ajax请求(Ajax request in for loop)我想用for循环循环100次ajax请求。 这是我的代码:for(var i=1; i<100; i++){var num = i+1;var request = new XMLHttpRequest();request.open("GET", "http://localhost/test/1/2/main.php
for循环中的Ajax请求(Ajax request in for loop)
我想用for循环循环100次ajax请求。 这是我的代码:
for(var i=1; i<100; i++)
{
var num = i+1;
var request = new XMLHttpRequest();
request.open("GET", "http://localhost/test/1/2/main.php?t="+num+"", true);
request.send(null);
request.onreadystatechange = function() {
if (request.readyState == 4) {
var parser = new DOMParser();
var doc = parser.parseFromString(request.responseText, "text/html");
var rows = doc.getElementsByTagName("table")[0].getElementsByTagName("tbody")[0].getElementsByTagName("tr");
var sum = 0;
for(var j=0; j
{
sum += parseInt( rows[j].getElementsByTagName("td")[7].textContent.trim() );
}
alert(num);
}
}
}
但它不起作用。 在控制台中,我看到100次此信息:
等等一切都应该没问题。 但我只看到警报14次(我现在不知道为什么14次),没有100次。
为什么这个程序不起作用?
I'd like to loop 100 times ajax request with for loop. This is my code :
for(var i=1; i<100; i++)
{
var num = i+1;
var request = new XMLHttpRequest();
request.open("GET", "http://localhost/test/1/2/main.php?t="+num+"", true);
request.send(null);
request.onreadystatechange = function() {
if (request.readyState == 4) {
var parser = new DOMParser();
var doc = parser.parseFromString(request.responseText, "text/html");
var rows = doc.getElementsByTagName("table")[0].getElementsByTagName("tbody")[0].getElementsByTagName("tr");
var sum = 0;
for(var j=0; j
{
sum += parseInt( rows[j].getElementsByTagName("td")[7].textContent.trim() );
}
alert(num);
}
}
}
But it's not working. In console I see 100 times this information:
Etc. So everything should be ok. But I see alert only 14 times (I don't now why 14),no 100.
Why this program not working?
原文:https://stackoverflow.com/questions/39269211
更新时间:2020-01-18 15:56
最满意答案
请在下面的代码。 这将允许仅在上一次完成之后触发ajax调用。 所以不会错过任何ajax电话。
var num = 0;
doAjax(0);
function doAjax(arrCount)
{
if(num<100){
num += 1;
var request = new XMLHttpRequest();
request.open("GET", "http://localhost/test/1/2/main.php?t="+num+"", true);
request.send(null);
request.onreadystatechange = function() {
if (request.readyState == 4) {
var parser = new DOMParser();
var doc = parser.parseFromString(request.responseText, "text/html");
var rows = doc.getElementsByTagName("table")[0].getElementsByTagName("tbody")[0].getElementsByTagName("tr");
var sum = 0;
for(var j=0; j
{
sum += parseInt( rows[j].getElementsByTagName("td")[7].textContent.trim() );
}
alert(num);
doAjax(num)
}
}
}
}
Please below code. Which will allow to fire ajax call only after previous has been completed. So no ajax call will missed.
var num = 0;
doAjax(0);
function doAjax(arrCount)
{
if(num<100){
num += 1;
var request = new XMLHttpRequest();
request.open("GET", "http://localhost/test/1/2/main.php?t="+num+"", true);
request.send(null);
request.onreadystatechange = function() {
if (request.readyState == 4) {
var parser = new DOMParser();
var doc = parser.parseFromString(request.responseText, "text/html");
var rows = doc.getElementsByTagName("table")[0].getElementsByTagName("tbody")[0].getElementsByTagName("tr");
var sum = 0;
for(var j=0; j
{
sum += parseInt( rows[j].getElementsByTagName("td")[7].textContent.trim() );
}
alert(num);
doAjax(num)
}
}
}
}
相关问答
多谢你们。 我找到了一个解决方案。 我把这个功能分成了两个功能。 当第一个请求完成时,它调用第二个启动在promise中声明的请求。 Thanks guys. I've have find a solution. I separated the function in two functions. When the first has done its request, it calls the second one which launches its requests declared in
...
使用.append() $("#cc-msg").append(html + '
');
According to Anthony Grist comments, this AJAX request should not have async: false parameter. So, the answer is
...
在ajax请求中的完整函数中调用下一个请求 var values = ["url1", "url2", "url3"];
values.forEach(function(value, i) {
var jsonReq = JSON.stringify({
action: 101,
supported: value
});
...
$.ajax({
type: "POST",
url:
...
你的问题是,当执行回调时, i有循环结束的值。 修复的标准解决方案是添加一个中间立即调用的函数来保护i的值: for (var i = 0; i < 20; i++) {
(function(i){
... your code
})(i);
}
对函数的调用创建了一个范围,其中i是一个不同的变量。 Here's how I fixed it: function run(i, howManyToRun, start) {
if(i >= howManyToRun)
...
我认为你正在寻找这样的东西: $.ajax({
type: "POST",
url: "_js/changetags.php",
dataType:'json',
success: function(data){
var arr = data.tagsinserted.split(',');
for(var i = 0; i
//Bad idea to use .each(
...
您可以使用占位符。 $.each(elem, function (index, item) {
var $placeholder = $('
$.ajax({
type: 'post' ,
url: moviesSearchUrl + '&q=' + encodeURI(item) + '&page_limit=1'
...
好,谢谢。 经过几个小时的分析和反思,我意识到为什么这个脚本会同步:我打开script.php文件,我注意到这个和文件的beginig: <?php
session_start();
$var1=$_SESSION['SOMEVAR'];
.......
//do php script.....
.......
?>
所以我有一个使用会话的php脚本并行ajax调用,但会话在这种情况下锁定了要执行syncrosnly会话变量请求的原因,所以这个问题的解决方案是: <?php
session_s
...
请在下面的代码。 这将允许仅在上一次完成之后触发ajax调用。 所以不会错过任何ajax电话。
var num = 0;
doAjax(0);
function doAjax(arrCount)
{
if(num<100){
num += 1;
var request = new XMLHttpRequest();
...
这是预期的行为,因为请求是异步的。 它们可能按您需要的顺序触发,但响应时间完全取决于服务器以及处理每个请求所需的时间。 例如,假设您提出3个请求。 #1需要150ms才能完成,#2 200ms和#3 75ms。 然后,您的done()处理程序将按顺序执行3,1,2。 如果您依赖于按特定顺序处理的响应,则需要修改代码以在单个请求中发送所有数据,以便可以根据需要格式化响应。 使用async: false可能会创建您期望的行为,但使用它是非常糟糕的做法,并且上述解决方案将更加可取。 This is ex
...
您正在循环中输出您的 ,这意味着您正在生成多个重复的ID。 DOM ID 必须在整个文档中是唯一的。 由于你有重复项, $('#editform')将只返回它找到的第一个匹配元素 - 它不会返回任何其他元素,因为它不应该。 更改为使用类而不是id来标记元素,或者使用您在点击内捕获的event并从中提取点击目标。 You're outputting your in a loop, which means you're produ
...
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)