Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当javascript问题出现时,请执行以下操作_Javascript_Ajax_While Loop_Do While - Fatal编程技术网

当javascript问题出现时,请执行以下操作

当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

我试图在do-while循环中发送多篇文章,但结果没有添加

<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的原因