我有一个使用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")
提前谢谢!
答案 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上找到它,试一试。
希望这有帮助!