JQuery调用没有命中$ .post上的服务器

时间:2012-11-14 17:38:17

标签: jquery python django post

我正在尝试使用Django向服务器发出简单的POST请求。我可以使用另一个api客户端进行post调用以测试它,但是当使用jquery时它永远不会返回任何内容或显示来自回调函数的警报。下面是我的jquery和django代码。我已经取代了api电话,但我知道这是正确的。

$(document).ready(function(){
  $("#signInSubmit").click(function(){
    alert("Posting email: "+$("#email").val()+" guests: "+$("#guests").val());
    $.post("apicall",
    {
      'email':$("#email").val(),
      'guests':$("#guests").val(),
      'event':"1"
    },
    function(data,status) {
               alert("Data: " + data + "\nStatus: " + status);
    });
  });
});

这是django视图被击中:

@csrf_exempt
def participant_info(request):
    if request.method == 'GET':
        participant_email = request.GET.get('email')
        participant = Participant.objects.get(email = participant_email)

        #serialized_obj = serializers.serialize('json', [ participant, ])

        response = HttpResponse()
        response.content = serialized_obj = serializers.serialize('json', [ participant, ])
        response['Content-Type'] = 'application/json'
        return response

        #return HttpResponse(response, mimetype="application/json")

    if request.method == 'POST':
        participant_email = request.POST.get('email', '')
        numguests = request.POST.get('guests', '')
        eventid = request.POST.get('event', '')

        participantkey = Participant.objects.get(email = participant_email)
        eventkey = Event.objects.get(id=eventid)
        per = Participant_Event_Record(guests = numguests, event = eventkey, participant = participantkey)
        per.save()

        response = HttpResponse()
        response.content = serialized_obj = serializers.serialize('json', [ per, ])
        response['Content-Type'] = 'application/json'
        return response

2 个答案:

答案 0 :(得分:1)

我认为可能会发生一些事情:

  1. 在jQuery调用中指定内容类型,确保它显示为'appliciation / json'(http://api.jquery.com/jQuery.ajax/),因为您正在序列化,假设它是JSON,但它默认为'application / x-www-form-urlencoded'。

  2. 您的POST网址需要在其网址末尾添加/,并且您要发布到没有/的端点,这会让Django重定向到/ URL。您可以通过设置APPEND_SLASH设置(https://docs.djangoproject.com/en/1.4/ref/settings/#append-slash)来禁用它,但实际上最好始终使用'/'调用所有端点,所以我要说的不是用$ .post(“apicall”,...)发帖,试试$ .post(“apicall /”,...),看看是否有帮助。

  3. 否则,您可以发布尝试时收到的错误吗?来自Django控制台和Chrome中的Javascript控制台?

答案 1 :(得分:0)

原来它被包裹在我没注意到的HTML正文中的一个表单中。删除表单包装后,它完美地工作。