代码之家  ›  专栏  ›  技术社区  ›  rhodesjason

为什么我被困在这个AJAX提交循环中?

  •  0
  • rhodesjason  · 技术社区  · 16 年前

    我正在尝试使用jQuery表单插件在更改时动态提交表单。

    它确实在工作,但每次用户更改输入值时,它都会执行.post,运行我的成功“alert()”,然后一次又一次地重复,直到我刷新页面以停止循环。代码如下:

    <!DOCTYPE html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>AJAX Form Test Suite</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
    <script src="_scripts/jquery.form.js"></script>
    <script>
        $(document).ready(function() {
        var options = { 
            success:       alertYes // post-submit callback 
        }; 
    
        // binding to each input's change event 
        $('#mainForm input').change(function() { 
    
            $(this).parent().ajaxSubmit(options); 
    
            return false; 
        });
    
        //success callback function
        function alertYes()  {      
            alert('You did it!'); 
        } 
    });
    </script>
    </head>
    
    <body>
    <div id="ajaxMessage">
    <h1>This is a suite AJAX form</h1>
    <form id="mainForm" action="saveForm.php" method="post">
        <ul class="nolist">
        <li class="label"><label>Name</label></li>
        <li class="input"><input type="text" name="name" value="Eric Roberts" /></li>
        <li class="label"><label>Email</label></li>
        <li class="input"><input type="text" name="email" value="e-rob@tvgods.com" /></li>
        <li class="label"><input type="submit" name="submit" value="DO IT" /></li>
        </ul>
    </form>
    </div>
    </body>
    </html>
    

    我做错了什么,让它像那样不断地循环?我假设当.post返回时,在警报之后,它再次模糊一个输入,然后一次又一次地重新提交ajax调用,但我不知道它为什么会这样做?

    谢谢

    2 回复  |  直到 16 年前
        1
  •  4
  •   3Dave    16 年前


    更新

    如果您使用的是Firebug,则可以使用以下javascript:

    console.debug('my message goes here');
    

    将消息发送到Firebug控制台。我通常将其包装在一个调用中,如下所示:

    function status(msg)
    {
      if(console)
        console.debug('# '+msg);
      }
    }
    

    然后在我的javascript中调用status('mymessagehere…'),以发出我需要的任何调试/跟踪消息。通过像我上面所做的那样将其包装到一个函数中,可以确保代码在未定义console对象的浏览器(即未安装Firebug的任何浏览器)中运行时仍能工作。

        2
  •  1
  •   Parrots    16 年前

    .change 而不是输入上的事件?这可能会解决这个问题,并且您将避免许多不必要的提交。现在,如果有人在表单上签入然后签出(不做任何更改),它将提交,这是一个无意义的提交。无论如何,改变可能更接近于你想要做的事情。