从 ajax 向 python 函数发送 post 请求但收到 GET 请求?

Posted

技术标签:

【中文标题】从 ajax 向 python 函数发送 post 请求但收到 GET 请求?【英文标题】:Sending A post request from ajax to a python function but receiving a GET request? 【发布时间】:2015-07-25 16:25:13 【问题描述】:

我是 Django 新手。我正在向 python 函数发送一个 ajax POST 请求,该函数又将数据存储在来自 ajax 的变量中并返回 HttpResponse。所以我在 python 中检查了 request.method,它以 GET 形式出现。

$.ajax(
  url:"create_post/",
  type:"POST",

  data : F_Name: First_Name ,L_Name: Last_name,Eadd: Email , Password: Pass,
  success:function()
    window.location.href="create_post/";
    console.log ("Success")
  ,
  cache:false,
  failure: function(errMsg) 
    alert(errMsg);
  
);

这是我的 ajax 请求。

它将数据发送到这个函数。

def create_post(request):
    if request.method == 'GET':
        First_name=request.GET['F_Name'];
        Last_Name=request.GET["L_Name"];
        Email_address=request.GET["Eadd"];
        Pass=request.GET["Password"];
    return HttpResponse("<html><body>hi this is me .</body></html>");

当我检查为return(request.method) 时,它给了我GET

有人可以解释这种行为吗? 在函数中我有request.method==GET 在这种情况下DJango 给我内部服务器500 错误。

谢谢

【问题讨论】:

我仍然收到相同的 GET 请求,我将 type 替换为 method 如果您收到 500 错误,您确定它正在发送 GET 请求吗?你能显示你的 URL 配置吗? 在views.py中我检查了它...def create_post(request): return HttpResponse(request.method) 我得到了GET。所以这意味着它是一个GET请求? 在您的浏览器开发者选项中检查触发的请求是作为 POST 还是 GET(在浏览器端)发送。 你可以print request.method 看看你的控制台是打印POST还是GET 【参考方案1】:

我很惊讶地看到你们没有人注意到他在他的 ajax 中定义了方法:“POST”,并且他的函数用于“GET”请求。

他得到 print request.method = "GET" 和 500 错误输出的主要原因是在他的 ajax 成功函数中使用了 window.location.href="create_post/" 。除非我们明确将其定义为“POST”或其他任何请求,否则每个请求默认都是一个 get 请求。

所以这里是这样的, - Ajax 通过 POST 调用 url,由于未知原因,响应在成功函数中出现(根据发布的 POST 方法的视图,奇怪的 coz 不会向 ajax 请求返回任何内容)。 - 成功函数再次通过 GET 请求调用相同的 url(页面刷新),他将 print request.method 视为“GET”并出现 500 错误,因为这是错误的做法。

【讨论】:

很抱歉,当我学习 Django 时,我不知道如何使用网络。但是非常感谢您的关注。【参考方案2】:

你的 ajax 方法是 post,所以我认为你的 views.py 可以试试这个

def create_post(request):
    if request.method == 'POST':
        First_name=request.POST['F_Name']
        Last_Name=request.POST["L_Name"]
        Email_address=request.POST["Eadd"]
        Pass=request.POST["Password"]
    return HttpResponse("<html><body>hi this is me .</body></html>")

【讨论】:

在views.py中我检查了它...def create_post(request): return HttpResponse(request.method)我得到了GET。所以这意味着它是一个GET请求?

以上是关于从 ajax 向 python 函数发送 post 请求但收到 GET 请求?的主要内容,如果未能解决你的问题,请参考以下文章

从 AJAx 向 WCF Webservice 链接发送数据

从外部站点向 Laravel 发送 POST 请求

AJAX get() 和 post() 方法

AJAX 的GET和POST方法(向服务器发送请求)

发送ajax调用到YII中的函数

ajax_get/post_两级联动