Ajax POST 到 url 然后重定向到它

Ajax POST to an url then redirect to it

我正在构建一个网络应用程序,用户可以在其中在传单地图上创建标记。标记的详细信息保存在 Django 的后端。 我的目标是在点击地图后将用户重定向到详细信息页面以填充标记的详细信息。 这里的 js 代码重定向到 url 当用户点击传单地图时使用 Ajax post.It 的 运行 创建。

map.on("click", function (e) { 
 window.location.href = {% url 'create' %};
     $.ajax({
          url: {% url 'create' %},
          data: { markers: markers_dict},
          type: "POST"
        }).done(function (response) {
          console.log(response);
        });
}

但我在 views.py 中苦苦挣扎,因为这个重定向和 AJAX post 创建了两个请求,一个是 GET,另一个是 POST:

def create_marker(request):
    if request.method == "POST":
        r = request.POST.get("markers")
        print(r)
        return JsonResponse({"response":"succeed"})
    else:
        return JsonResponse({"response":"failed"})

和 urls.py :

url_patterns = [
    path("create/",views.create_marker,name="create"),
]

它总是 returns 失败的响应,即使它在控制台中打印 r 也是如此。如何将这些前端数据发送到创建 url,同时重定向到此 url 并使用这些数据创建 django?

您将在进行 ajax 调用之前退出当前页面。将重定向移动到 ajax 调用的完成块中。像这样:

map.on("click", function (e) { 
     $.ajax({
          url: {% url 'create' %},
          data: { markers: markers_dict},
          type: "POST"
        }).done(function (response) {
         window.location.href = “{% url 'create' %}/” + response.id;
        });
}

您的 urls.py 中还需要一个 url 用于在后端编辑标记对象。试试 CBV DetailView.

首先,您 post 使用您的地图数据查看此视图​​。一旦成功,将用户重定向到创建数据的编辑视图。

  1. 用户点击地图您在后端创建最小对象
  2. 成功后获取创建对象的ID
  3. 将用户重定向到该对象的 form/edit 视图
  4. 用户填写剩余项目
  5. 用户点击保存