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

AJAX Post未发送表单数据

  •  0
  • GrantU  · 技术社区  · 12 年前

    我有以下内容 AJAX POST 下面,由于某种原因,查看我的日志(服务器端),它发送的请求是空白的 {} 而不是发送JSON数据。我已经用尽了所有可能的服务器端问题——这是一个客户端问题,脚本没有发送数据。为什么?

    bootstrap-wizard.js可在此处找到-> GitHub

    我的页面代码覆盖脚本提交:

    <script src="{{ STATIC_URL }}js/bootstrap-wizard.js"></script>
    <script type="text/javascript">
       $(function() {
    
           var options = {width:1000};
           var wizard = $("#some-wizard").wizard(options);
    
            $("#open-wizard").click(function() {
            wizard.show();
        });
    
    
    wizard.on("submit", function(wizard) {
    
            $.ajax({
                      url: '/api/v1/rewards/campaigns/',
                      type: 'POST',
                      contentType: 'application/json; charset=UTF-8',
                      data: $('#wizard').serialize(),
                      beforeSend: function (request) {
    
                          request.setRequestHeader("X-CSRFToken", $('input[name="csrfmiddlewaretoken"]').val());
                      },
    
                      success: function(data, textStatus) {
                            wizard.submitSuccess(); // displays the success card
                            wizard.hideButtons(); // hides the next and back buttons
                            wizard.updateProgressBar(0); // sets the progress meter to 0
    
                          console.log('success');
    
                      },
                      error: function(errorThrown){
                         // data = JSON.parse(errorThrown.responseText);
    
                           wizard.submitError(); // display the error card
                           wizard.hideButtons(); // hides the next and back buttons
    
    
                          console.log(errorThrown);
                      }
                  });
    
    
    
      });
    
    
    
       });
    
    
    
    </script>
    

    这是我的表格:

    <form action="" method="post" class="form-horizontal" id="wizard" enctype="application/json" >
    {% csrf_token %}
    
    <div class="wizard" id="some-wizard">
       <h1>{% trans "Setup Wizard" %}</h1>
    
    
       <div class="wizard-card" data-cardname="card1">
          <h3>{% trans "General" %}</h3>
    
           etc, etc <=== all my form fields here
    
       </div>
    
    1 回复  |  直到 12 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    serialize() 返回键/值格式的URL编码数据(x-www-form-urlencoded),而不是JSON。如果您的服务器端需要JSON,那么您需要更改数据参数:

    $.ajax({
        ...
        data : JSON.stringify({ input_a : 'value a', input_b : 'value b' }),
        ...
    });
    

    看见 this question 了解如何将表单自动转换为JSON。