当前位置: 首页 > 面试题库 >

做一会儿javascript问题

瞿和硕
2023-03-14
问题内容

我正在尝试在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>

输出为:5、5、5、5、5,

我需要的输出是:1、2、3、4、5


问题答案:

由于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比使用元素标签名称为哈希选择器添加前缀要快得多。另外,每次成功运行时,都应避免为结果DIV重新查询DOM。抓住一次并在需要时使用:

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);
}


 类似资料:
  • 我对以下代码有问题,我将其隔离为最封闭的形式,我正在使用Java8,它几乎准备好发布(2014年3月18日),所以我预计在实现本身不会有严重的问题,所以它可能/必须是我自己的代码: 注意:代码是用Java8编写的,它具有各种新特性,包括接口中的方法实现。 代码本身可能不是最有意义的,但那是因为我已经剥离了其他不相关方法的负载。 但是,当您观察输出时,您会看到一些奇怪的东西,在某个时刻,对于我个人来

  • 我用Java重写了我的第一个程序,现在它看起来像这样: 实际上一切都很顺利,除了: > 当我在输入a、B和C的值时输入一个非数字类型时,会显示一个双重警告,然后它就会正常工作。(仅1个警告) 当我回答Y或N时,程序终止,但如果我输入任何其他内容,如“g”、“2”或“w”等,程序会再次询问我(第一次也是两次),然后当我输入Y或N,它工作得很好。 我真的不知道这是怎么回事,因为在编译过程中没有警告或错

  • 问题内容: 我在使用具有以下映射的JPA删除孤立节点时遇到问题 我遇到了孤立角色挂在数据库周围的问题。 我可以使用特定于注释的Hibernate标记,但是显然我不想将解决方案绑定到Hibernate实现中。 编辑 :似乎JPA 2.0将包括对此的支持。 问题答案: 如果将它与Hibernate一起使用,则必须显式定义批注,该批注可与JPA结合使用。 如果您不打算使用Hibernate,则必须先明确

  • 本文向大家介绍请你说说你做过的最有趣的一件事儿。相关面试题,主要包含被问及请你说说你做过的最有趣的一件事儿。时的应答技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍JavaScript中setTimeout的那些事儿,包括了JavaScript中setTimeout的那些事儿的使用技巧和注意事项,需要的朋友参考一下 一、setTimeout那些事儿之单线程  一直以来,大家都在说Javascript是单线程,浏览器无论在什么时候,都且只有一个线程在运行JavaScript程序。  但是,不知道大家有疑问没——就是我们在编程过程中的setTime

  • 我想匹配一段字符串中所有的input 并使用replace进行替换,如果input里面有类似data-* 这种自定义属性的就跳过 不知道这种正则该怎么写,我也阅读了文档并使用google。都没找到 比如 <input type='text' /> 这种Input就匹配,<input data-xxx /> 带有自定义属性的input 正则则不匹配