我正在使用ajax
从html页面发送jquery
请求,以发送bulk
电子邮件并从服务器获取数据。
这是发送批量邮件请求的代码
var sendReq = $.ajax({
type: 'post',
data: "leftID="+JSON.stringify(leftID)+"&rightID="+JSON.stringify(rightID)+"&mode="+mode,
dataType: 'json',
url:"bulk.php"
});
sendReq.done(function( data ) {
$("#bms-ack").html(data.status);
$("#bms-ack").fadeIn('slow');
$("#bms-ack").fadeOut(6000);
console.log(data);
console.log("success");
});
sendReq.fail(function(jqXHR, data){
$("#bms-ack").html(data.status);
$("#bms-ack").fadeIn('slow');
$("#bms-ack").fadeOut(6000);
console.log("fail");
});
现在的问题是当我向php页面发送请求时,它会发送邮件并回复success
消息。
因为php正在将响应返回给客户端,所以这个ajax请求会被阻止吗?因为当我从jqtable
发送另一个请求来获取新数据时,需要时间,直到ajax发送批量邮件的先前请求没有完成。最后我的jqtable
继续加载。
我如何摆脱阻止请求,我应该从php中删除返回的success
消息,如果我这样做,那么用户将如何知道该请求已被提交?
答案 0 :(得分:0)
如果我理解正确你的问题是你在第一个运行时无法启动另一个javascript通话?这是因为Javascript在大多数浏览器实现中都是单线程的。
答案 1 :(得分:0)
据我所知,如果您发送AJAX请求,则与以非异步方式要求新页面完全相同:只要页面未发送到浏览器,您就会一直等待结果,任何其他请求只是一个刷新。
因此,如果您想实现“非阻塞”AJAX方式,请将AJAX请求发送到“不同”URL。我的意思是:
url:"bulk.php" => Change to url: "bulk.php?v=3"
查询字符串只是一个foo,它只是为了更改你正在调用的URL。
当您要进行AJAX请求时,只需为您正在进行的每个请求添加一个查询字符串(使用?v = X绰绰有余,其中X甚至可能是您正在检索的数据之一,行的id,无论是什么......),它都像魅力一样工作,因为浏览器认为是一个不同的请求,并不阻止你(阻止你)检索PHP文件正在生成的值(虽然你知道值是不同的,因为你发送了不同的数据,:D)
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
for(var $i=0; $i<5; $i++) {
$.ajax({
type: 'post',
url:"ajax.php?v="+$i,
success: function(data) {
console.log(data)
}
});
console.log('Browser: ' + $i);
}
});
</script>
</head>
<body>
AJAX TEST
</body>
</html>
AJAX文件:(ajax.php)
<?php
sleep(5);
echo 'WAAAAAAAA';
对我来说,它几乎立即向服务器发送5个AJAX调用(不阻塞行为)。我认为这正是您想要实现的目标,您是否可以测试您的浏览器并告诉我您是否收到了相同的内容?顺便说一句,您可以使用AJAX帖子发布浏览器行为的图像吗?