通过Django中的XMLHttpRequest将数据发送到服务器

时间:2020-07-21 18:02:35

标签: javascript django xmlhttprequest

我正在设计一个Web应用程序,用户可以在其中发布内容到提要。 我通常通过XMLHttpRequest将帖子和帖子数据发送到服务器。

request = new XMLHttpRequest()
    var user = 'current user'
    var post = 'some text'
    request.open("POST", "/sent_new_post?x=" + post + "&user=" + user)
    request.setRequestHeader("X-CSRFToken", csrftoken);
    request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
    request. onload = () => { // do stuff when response comes back }
    request.send()

然后我在服务器上访问数据

x = request.GET['x']

但是我在使用此方法时遇到了一些问题,尤其是当帖子文本包含“#”时。 我想知道是否可以使用

发送数据
request.send(data)

但是我不知道如何在视图函数中访问该数据... 如何在我的视图函数中访问已使用request.send(data)发送到服务器的数据?

2 个答案:

答案 0 :(得分:1)

我不确定,因为这个问题对我来说还不是很清楚。

如果您要访问的是请求的有效负载,那么您需要知道

在HttpRequest对象中,GET和POST属性是django.http.QueryDict的实例,django.http.QueryDict是类似字典的类,为处理同一键的多个值而定制。这是必要的,因为某些HTML表单元素尤其是为同一键1传递多个值。

因此,您可以通过编写类似'data'的内容来访问data= request.POST.get('data','')负载。

答案 1 :(得分:1)

如果要将url参数中的#发送到后端,则必须对其进行编码

"/sent_new_post?x=" + encodeURIComponent(post) + "&user=" + encodeURIComponent(user)

如果要在帖子正文中发送数据,则必须使用request.POST来访问数据,您仍然必须对要发送的数据进行编码。

request.send("x=" + encodeURIComponent(post) + "&user=" + encodeURIComponent(user));