ajax表单不提交处理程序期望提交名称属性

时间:2015-09-15 16:50:54

标签: javascript jquery python ajax

我在通过ajax提交表单时遇到了一些问题。我认为这是两个问题之一:

  1. leads.py(我可以查看,但无法修改)期望提交输入名称为name="submitButtonName",因为我使用e.preventDefault();来禁用提交表单的正常表单在提交时不由处理程序处理。

  2. 序列化的数据可能是错误的,当我将其输出到控制台时,它看起来像是重复的:

    如first_name =弗兰克&安培;姓氏= TheTank&安培; EMAIL_ADDR =坦率%40thetank.com&安培;备注=安培;如first_name =弗兰克&安培;姓氏= TheTank&安培; EMAIL_ADDR =坦率%40thetank.com

  3. 有什么建议吗?

    这是完整的脚本:

    <!-- Defines element markup -->
    <dom-module id="landing-modal">
    <template>
        <div id="landing-modal" class="modal hide fade" tabindex="-1" role="dialog">
            <div class="modal-body">
                <p class=lead>
                    To view this listing, please provide us with some basic contact information...
                </p>
                <form class="form-horizontal lead-form" method="post" action="/leads/buy">
                    <div class="control-group">
                        <label class="control-label">Required Information</label>
                    </div>
                    <div class="control-group">
                        <label class="control-label">First Name</label>
                        <div class="controls">
                            <input type="text" name="first_name" value="" required="" class="style-scope lead-form">
                        </div>
                    </div>
                    <div class="control-group">
                        <label class="control-label">Last Name</label>
                        <div class="controls">
                            <input type="text" name="last_name" value="" required="" class="style-scope lead-form">
                        </div>
                    </div>
                    <div class="control-group">
                        <label class="control-label">Email</label>
                        <div class="controls">
                            <input type="email" name="email_addr" value="" required="" class="style-scope lead-form">
                        </div>
                    </div>
                    <div class="control-group">
                        <div class="controls">
                            <input style="display:none;" type="text" name="remarks" value="" />
                            <input type="reset" value="Reset" name="reset" class="btn">
                            <input class="btn btn-primary" type="submit" name="submitButtonName" value="Submit" />
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </template>
    
    <script>
    $(document).on('submit', '.lead-form', function(e) {
         $.ajax({
            url: $('.lead-form').attr('action'), //gets the action url
            type: $('.lead-form').attr('method'), //gets the form method post
            data: $('.lead-form').serialize(), //creates the form submit date eg. FirstName=Mickey&LastName=Mouse
            success: function(html) {
            console.log($('.lead-form').serialize());
            }
        });
        e.preventDefault(); //prevents the submit input from being submitted normally
    });
    
    
    Polymer({
            is: 'landing-modal',
            created: function() {},
            ready: function() {},
            attached: function() {},
            detached: function() {},
            attributeChanged: function(name, type) {}
    });
    </script>
    </dom-module>
    

    编辑::

    我尝试添加

    <input type="hidden" name="submitButtonName" />
    <input class="btn btn-primary" type="submit" name="submit" value="Submit" />
    

    导致控制台出现500错误

    服务器端代码:

    if "submitButtonName" in kwargs:
        errors = []
        if not kwargs['first_name']:
             errors.append("Please enter your first name.")
        if not kwargs['last_name']:
             errors.append("Please enter your last name.")
        if not kwargs['email_addr']:
             errors.append("Please enter your email address.")
    
        if errors:
             error_msg = "<ul>" + "".join([
                  "<li>"+x for x in errors
             ]) + "</ul>"
             result['error_msg'] = error_msg
        else:
             save = True
    
    if save:
        # 'remarks' is an invisible field that can only get filled in by
        # spam bots, so if there's a value in it, ignore the submission.
        if kwargs['remarks']:
             import sys
             sys.stderr.write("Ignoring spam submission: %r\n" % ([mode,kwargs],))
        else:
             self.save_form(mode, kwargs) 
        raise cherrypy.InternalRedirect("/leads/thankyou/"+mode)
    
    result.update(self.form.render(values))
    if mode=="C":
        result.update(self.cmaform.render(values))
    if mode=="E":
        result.update(self.contactform.render(values))
    return result
    

0 个答案:

没有答案