【问题标题】:JQuery POST returns status code 200, but Django is not creating objectJQuery POST 返回状态码 200,但 Django 没有创建对象
【发布时间】:2018-11-23 08:30:57
【问题描述】:

我正在尝试向我的 Django 服务器发送一个 POST 请求。我以这种方式使用 JQuery:

$("#submit_button").click(function() {
    $.ajax({
        type: 'POST',
        url: '/API/send_news',
        data: {
            newstitle: "randomname"
        },
        success: function(response) {
            if (response.result === 'OK') {
                return HttpResponse("Done")
            } else {
                return HttpResponse("Fail")
            }
        }
    });
});

由于 403 状态码,我无法向我的函数发送发布请求。

【问题讨论】:

  • 200 不是错误,是status code 标题错误。你不得不说:Jquery POST 返回状态码 200,但是 Django 没有创建对象
  • 谢谢!你是对的
  • 执行New.objects.create 后,您的终端是否出现错误? @Dev9977
  • 不,我也在从 Django 管理创建订单,我可以毫无问题地添加对象。感谢您的帮助
  • 您能粘贴New objcet 型号代码吗?一步一步,json请求是否进入send_news方法?

标签: jquery django api post


【解决方案1】:

尝试将type 更改为method: post,见下文:

$("#submit_button").click(function(){
    $.ajax({
        method: 'POST',
        url: '/API/send_news',
        data: { name: "randomname" },
        success: function (response) {
            if (response.result === 'OK') {
                return HttpResponse("Done")
            } else {
                return HttpResponse("Fail")
            }
        }
    });
});

【讨论】:

  • 谢谢但同样的问题:(
【解决方案2】:

你可以试试 Tutorial 3: Class-based Views

如果您的 Ajax 方法中的 URL 没问题,那应该可以。

class send_news(APIView):

    def post(self, request, format=None):


        news_title = get_param(request.POST, "newstitle", NOT_NONE)
        news_small_description = get_param(request.POST, "newssmalldescription", OPTIONAL)
        news_description = get_param(request.POST, "newsdescription", OPTIONAL)
        news_image = get_param(request.POST, "newsimage", OPTIONAL)

        New.objects.create(
            news_title = newstitle,
            news_small_description = newssmalldescription,
            news_description = newsdescription,
            news_image = newsimage,
        )

        return HttpResponse()

对于您的url 文件:

from django.urls import path

from . import views

urlpatterns = [
    url(r'^send_news', views.send_news, name='send_news'),
]

还有你的javascript 文件:

$("#submit_button").click(function() {
    $.ajax({
        type: 'POST',
        url : {% url 'send_news' %},
        data: {
            newstitle: "randomname",
            csrfmiddlewaretoken: "{{ csrf_token }}"
        },
        success: function(response) {
            if (response.result === 'OK') {
                return HttpResponse("Done")
            } else {
                return HttpResponse("Fail")
            }
        }
    });
});

【讨论】:

  • 尝试了新的网址,但它不起作用..(您非常感谢您的帮助。)
  • 好吧也试过了,但我得到相同的日志:` [15/Jun/2018 23:25:07] "POST /API/invia_news HTTP/1.1" 200 3051 [15/Jun/2018 23 :25:07]“GET /static/js/index.js HTTP/1.1”304 0 `
  • 这是来自您的浏览器控制台,我的意思是,来自您的终端控制台的日志,您是否正在运行您的服务器。 @Dev9977
  • 对不起,我是从 Windows PowerShell 获取的。我从这里运行服务器。在我的浏览器控制台中,我没有日志
  • 是的,使用windows PowerShell 你必须看到你的日志和错误
猜你喜欢
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
相关资源
最近更新 更多