当javascript问题出现时,请执行以下操作
我试图在do-while循环中发送多篇文章,但结果没有添加当javascript问题出现时,请执行以下操作,javascript,ajax,while-loop,do-while,Javascript,Ajax,While Loop,Do While,我试图在do-while循环中发送多篇文章,但结果没有添加 <script type="text/javascript"> function action() { var initval = 1; var endval = 5; do { var action_string = 'txtuser=someone'; $.ajax({ type: "POST", u
<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>
函数动作(){
var initval=1;
var-endval=5;
做{
var action_string='txtuser=someone';
$.ajax({
类型:“POST”,
url:“http://localhost/js.php",
数据:动作字符串,
成功:功能(结果){
$('div#append_result')。append(initval+',
);
}
});
initval++;
}而(initval由于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);
}
由于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);
}
Ajax请求是异步的,这意味着当成功处理程序返回时,循环已经完成。相反,您可以创建一个闭包来保留值:
success: (function(i){
return function() {
$('div#append_result').append(i + ',<br/>');
}
})(initval)
成功:(功能(i){
返回函数(){
$('div#append_result')。append(i+',
');
}
})(initval)
Ajax请求是异步的,这意味着当成功处理程序返回时,循环已经完成。相反,您可以创建一个闭包来保留值:
success: (function(i){
return function() {
$('div#append_result').append(i + ',<br/>');
}
})(initval)
成功:(功能(i){
返回函数(){
$('div#append_result')。append(i+',
');
}
})(initval)
这是因为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();
}
});
}
var initval=1;
var-endval=5;
函数动作(){
var action_string='txtuser=someone';
$.ajax({
类型:“POST”,
url:“http://localhost/js.php",
数据:动作字符串,
成功:功能(结果){
$('div#append_result')。append(initval+',
);
initval++;
如果(initval这是因为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();
}
});
}
var initval=1;
var-endval=5;
函数动作(){
var action_string='txtuser=someone';
$.ajax({
类型:“POST”,
url:“http://localhost/js.php",
数据:动作字符串,
成功:功能(结果){
$('div#append_result')。append(initval+',
);
initval++;
如果(initVal)没有“关闭”interval的值,则是在避免关闭的影响(仍然存在)。我确实在避免原始闭包的影响。但是,我不是通过创建一个新的作用域来避免原始闭包的影响吗?记住,成功回调驻留在我创建的立即调用函数表达式中,导致“捕获”要结束的值…非常非常感谢,所有这些都很有帮助!!+1用于第一段代码(和点)。我将争论的第二点是:$('div#append _result');
会减慢速度,需要删除'div'部分,而不是缓存结果并在成功回调中使用它。$(“#append _result”)
比document.getElementById(“append_result”)
慢得可以忽略,所以我认为在这个特定的解决方案中不需要任何缓存。@karim79感谢+1。我同意应该删除选择器的div
部分。但是,缓存document.getElementById()的结果
肯定比调用它5次以上更有效,不是吗?因此jQuery版本似乎也是如此。你不是在“关闭”间隔值,而是在避免关闭的影响(它仍然存在)。我确实在避免原始闭包的影响。但是,我不是通过创建一个新的作用域来避免原始闭包的影响吗?记住,成功回调驻留在我创建的立即调用函数表达式中,导致“捕获”要结束的值…非常非常感谢,所有这些都很有帮助!!+1用于第一段代码(和点)。我将争论的第二点是:$('div#append _result');
会减慢速度,需要删除'div'部分,而不是缓存结果并在成功回调中使用它。$(“#append _result”)
比document.getElementById(“append_result”)
慢得可以忽略,所以我认为在这个特定的解决方案中不需要任何缓存。@karim79感谢+1。我同意应该删除选择器的div
部分。但是,缓存document.getElementById()的结果
肯定比调用它5次以上更有效,不是吗?因此jQuery版本似乎也是如此。这不是一个闭包,而是避免了闭包的影响。匿名函数仍然对initval有闭包。@RobG-正如我在回答我自己回答的评论时所说的,我尊重地不同意。@JAAulde-实际上我们不同意然而,额外的闭包是一个副作用,而不是原始闭包被破坏的原因。换句话说,它现在工作的事实不是因为额外的闭包,而是因为将值传递给另一个函数(并且仅仅因为该值是一个基元)。这不是一个闭包,它是在避免闭包的影响。匿名函数仍然对initval有一个闭包。@RobG-正如我在回答我自己的回答时所说的,我尊重地不同意。@JAAulde-实际上我们同意。但是,额外的闭包是一个副作用,而不是原始闭包是b的原因