0

我在这里尝试了所有东西,但我一定遗漏了一些东西,因为我在 Django 的 ajax 帖子没有返回任何东西。在这一点上,我已经把它归结为赤裸裸的骨头,只是试图让它发挥作用,没有快乐。

我的观点:

def saveProjectEntry(request):
    form = ProjectEntryUpdateForm(request.POST)

    if form.is_valid():
        msg = json.dumps({'msg':'success'})
        return HttpResponse(msg, mimetype='application/json')
    else:
        msg = json.dumps({'msg':'failed'})
        return HttpResponse(msg, mimetype='application/json')

我的 url.py 条目:

    url(r'^chargeback/savepe/$','chargeback.views.saveProjectEntry'),

我的 jQuery:

    $('#peUpdateForm').submit(function() {
         $.ajax({
          url:'/chargeback/savepe/',
          data: $("#peUpdateForm").serialize(),
          type: "POST",
          success: function(e) {
              alert("success");
          },
          error: function(e) {
              alert("failed");
          }
        });
         return false;
     });

我还尝试了 jQuery post 方法:

$('#peUpdateForm').submit(function(e){
    $.post('/chargeback/savepe/', $('#peUpdateForm').serialize(), function(data){ 
       alert("success");
    });
    e.preventDefault();
});

我什么也得不到。没有收到我的任何警报。没有从视图中得到任何错误(如果我只是直接导航到视图,我会在浏览器中显示预期的 {'msg':'failed'},所以 json 响应很好。url 调用正确的视图。唯一我能想到的是我的jQuery代码是错误的,但我无法弄清楚在哪里,并且控制台中没有错误。我已经在控制台中测试过,

$('#peUpdateForm').serialize()

我得到了预期值。把我的头发拉出来……谢谢。

编辑:当我在此处放置断点时,甚至不会调用将 HTML 添加为我的 post 方法,因此我的提交设置方式可能有问题。

<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable ui-dialog-buttons" style="outline: 0px; z-index: 1002; position: absolute; height: auto; width: 376px; top: 75px; left: 408px; display: block;" tabindex="-1" role="dialog" aria-labelledby="ui-id-8"><div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix">
<span id="ui-id-8" class="ui-dialog-title">Project Entry Update</span><a href="#" class="ui-dialog-titlebar-close ui-corner-all" role="button"><span class="ui-icon ui-icon-closethick">close</span></a></div>
<div id="addPEForm" style="width: auto; min-height: 0px; height: 365px;" class="ui-dialog-content ui-widget-content" scrolltop="0" scrollleft="0">
    <form method="post" id="peUpdateForm" action="">
    <div style="display:none">
        <input type="hidden" name="csrfmiddlewaretoken" value="wvzwSBl87vC1tbkbdfxsD82GnjtvJCSz"></div>

    <p><label for="id_departmentid">Department:</label>
    <select id="id_departmentid" class="projEntryControl" name="departmentid">
        <option value="" selected="selected">Choose a Department</option>
        <option value="1">ABND</option>
        <option value="2">ATT</option>
        <option value="3">AVI</option>
        <option value="4">CCS</option>
        <option value="5">PBW</option>
    </select></p>
    <p><label for="id_projectid">Project:</label>
    <select id="id_projectid" class="projEntryControl" name="projectid">
         <option value="-1">Choose a Project</option>
         <option value="undefined">Bexar Street</option>
         <option value="undefined">Chalk Hill</option>
         <option value="undefined">Crown Road</option>
    </select>
    </p>
    <p><label for="id_progNumId">Program Number:</label>
    <select id="id_progNumId" class="projEntryControl" name="progNumId">
        <option value="" selected="selected">Choose a Program Number</option>
        <option value="1">31664</option>
        <option value="2">DD-7081</option>
    </select></p>
    <p><label for="id_hoursWorked">Hours Worked:</label>
    <input name="hoursWorked" value="0.0" class="projEntryControl" maxlength="5" type="text" id="id_hoursWorked"></p>
    <p><label for="id_notes">Notes:</label>
    <textarea id="id_notes" rows="10" cols="40" name="notes"></textarea></p>
</form>
</div>

...

4

1 回答 1

1

AFAIK,如果您想将按钮保留在外面,这是正确的方法:

 $('#button').on('click', function(){
      $.ajax({
             data: $('#form').serialize(),
             ...});
 });

这是因为 `$('#form').submit() 仅当您将提交按钮保留在表单标签内时才会被调用。

于 2012-11-29T21:56:13.210 回答