我尝试在do while循环中发送多个post,但没有添加结果
<script type="text/javascript">
function action() {
var initval = 1;
var endval = 5;
do {
var action_string = 'txtuser=someone';
$.ajax({
type: "POST",
url: "http://localhost/js.php",
data: action_string,
success: function(result){
$('div#append_result').append(initval + ',<br/>');
}
});
initval++;
} while (initval <= endval);
}
</script>输出是: 5,5,5,5,5,
我需要输出是: 1,2,3,4,5,
发布于 2011-08-05 11:56:55
由于AJAX的异步特性,当您的成功函数对任何生成的AJAX请求运行时,循环已经完成,initval被设置为5。您需要在每个请求开始时捕获initval的状态,并在success()方法中使用该捕获的状态。关闭该值是最简单的方法:
function action() {
var initval = 1;
var endval = 5;
do {
var action_string = 'txtuser=someone';
( function( captured_initval ){
$.ajax({
type: "POST",
url: "http://localhost/js.php",
data: action_string,
success: function(result){
$('div#append_result').append(captured_initval + ',<br/>');
}
});
}( initval ) );
initval++;
} while (initval <= endval);
}但是要知道,一个或多个请求可能会在服务器上挂起,从而允许后一个请求首先完成,这可能会导致1, 2, 5, 3, 4或类似的结果。
而且,使用元素的ID比在散列选择器前面加上元素标记名要快得多。另外,您应该避免在每次成功运行时都重新查询DOM以获取结果DIV。抓取一次,在需要的时候使用:
function action() {
var initval = 1;
var endval = 5;
do {
var action_string = 'txtuser=someone',
$AppendResult = $('#append_result');
( function( captured_initval ){
$.ajax({
type: "POST",
url: "http://localhost/js.php",
data: action_string,
success: function(result){
$AppendResult.append(captured_initval + ',<br/>');
}
});
}( initval ) );
initval++;
} while (initval <= endval);
}发布于 2011-08-05 11:58:03
Ajax请求是异步的,这意味着在成功处理程序返回时,循环已经完成。相反,您可以创建一个闭包来保留该值:
success: (function(i){
return function() {
$('div#append_result').append(i + ',<br/>');
}
})(initval)发布于 2011-08-05 12:00:56
这是因为ajax的异步行为:以下是修改后的版本:
var initval = 1;
var endval = 5;
function action(){
var action_string = 'txtuser=someone';
$.ajax({
type: "POST",
url: "http://localhost/js.php",
data: action_string,
success: function(result){
$('div#append_result').append(initval + ',<br/>');
initval++;
if(initval<=endval)
action();
}
});
}现在,这在某种程度上是一种顺序方法。注意:我假设每个ajax请求都返回成功,如果有错误,您应该在错误回调中处理它们。
https://stackoverflow.com/questions/6951191
复制相似问题