AJAX成功没有执行

时间:2013-07-10 16:16:42

标签: ajax django

我有一个使用ajax提交的表单。提交总是成功的,但我的成功陈述中没有任何内容执行。我的django视图返回status = 200,但仍然没有。任何人都可以告诉为什么这不执行?在我的终端中,它显示我有一个管道故障,但我已经读过我可以忽略我的开发服务器上的那些。不确定这与它有什么关系。

我的表格:

<form onsubmit="createAdd({{ newID }}, {{ user.get_profile.id }})" class="form-horizontal create" method="post">{% csrf_token %}
 <div class="control-group">
    <label class="control-label" for="newName">Name*</label>
    <div class="controls">
      <input type="text" name="newName" id="name" required>
   </div>
  </div>
  <div class="control-group">
    <div class="controls">
      <button type="submit" class="btn btn-primary" value="Create"><i class="icon-wrench icon-white"> </i> Create </button>
    </div>
  </div>
</form>

我的AJAX功能:

function createAdd(event, user){  // Creates a custom event and automatically gives creator ownership
    var name = document.getElementById('name').value;
    var loc = document.getElementById('loc').value;
    var start = document.getElementById('datepicker').value;
    var end = document.getElementById('datepicker2').value;
    var tags = document.getElementById('tags').value;
    var jqxhr = $.ajax( "/eventsearch/eventsearch/createCustom/", {
        type: "POST", 
        data: {name: name, loc: loc, start: start, end: end, tags: tags, event_id: event, profile: user}
    })
    .done(function() { alert("success"); })
    .fail(function() { alert("hello") })
}

我实际上并不想去谷歌,我只是想让它重定向某个地方。如果我在其中放置alert,也不会执行。

我的观点:

@login_required
def createCustom(request):

    newID = len(customEvent.objects.all())
    newName = request.POST['name']
    newLoc = request.POST['loc']
    newStart = request.POST['start']
    newEnd = request.POST['end']
    newTags = request.POST['tags']
    newURL = "/eventc/" + str(newID)

    e = customEvent(event_id = newID, title = newName, start = newStart, end = newEnd, location = newLoc, tags = newTags, url = newURL)
    e.save()

    event_id = request.POST['event_id']
    user = request.POST['profile']
    event = customEvent.objects.get(event_id = event_id)
    user = Profile.objects.get(id = user)
    user.ownedEvent.add(event)

    return HttpResponse('', content_type="application/json")

提前谢谢!

2 个答案:

答案 0 :(得分:3)

你需要在回答中返回 - JSON
例如

def answer(request):    
    # same you code
    payload = {'success': True}
    return HttpResponse(json.dumps(payload), content_type='application/json')

答案 1 :(得分:2)

the jQuery.ajax docs我可以读到这个:

  

弃用注意:自jQuery 1.8起,不推荐使用jqXHR.success(),jqXHR.error()和jqXHR.complete()回调。要准备最终删除的代码,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。

所以,我会按照那里的例子来试试这是否有效:

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.ajax( "example.php" )
    .done(function() { alert("success"); })
    .fail(function() { alert("error"); })
    .always(function() { alert("complete"); });
// perform other work here ...
// Set another completion function for the request above
jqxhr.always(function() { alert("second complete"); });

根据您的代码,它可能如下所示:

var jqxhr = $.ajax( "/eventsearch/eventsearch/createCustom/", {
     data: {name: name, loc: loc, start: start, end: end, tags: tags, event_id: event, profile: user}
    })
    .done(function() { alert("success"); })
    .fail(function() { alert("error"); })
    .always(function() { alert("complete"); });

我不完全确定数据,我只是关注文档。

此外,最好将mimetype添加到响应中,如下所示:

return HttpResponse('', mimetype="application/json")

我想我已经读过Ajax无法正常工作的地方,如果没有用Django设置,我不记得在哪里,我试图在Google上找到它,试一试。

希望这有帮助!