[英]Unable to send string in HTTP POST
所以,我是 Web 开发的新手,我需要向服务器发送 POST 请求。 这是代码:
HTML:
<input type="text" class="form-control" placeholder="User ID" name="email" id="email">
<button class="btn btn-theme btn-block" href="#" onClick="httpPOST(email.value)" type="submit"> <iclass="fa fa-lock"></i>SIGN IN</button>
JavaScript:
function httpPOST(data)
{
var client = new XMLHttpRequest();
var url = "http://193.136.19.86:8080/restaurants/login/";
client.open("POST", url, true);
client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
client.send(data);
}
如果 email.value 中有一个数字,甚至一个 bool,代码就可以正常工作。 例如,如果我在“电子邮件”输入中写“2”,服务器会很好地接收它。 但是,当我写一封真实的电子邮件(或其他字符串)时,它给了我 500(内部服务器错误)。
知道我做错了什么吗?
这是服务器的视图,使用 Django 开发:
@csrf_exempt
def logtrans(request):
#print(request)
context= RequestContext(request,{})
d=json.loads(request.body)
if request.method == 'POST':
print(d)
return HttpResponse("Done")
提前致谢!
我自己从未使用过 Django,但我假设您的问题是使用一种类型的编码从您的浏览器发送数据(URL 编码数据),但在您的服务器上解码不同的数据(JSON)。 当您尝试发送的数据不是有效的 JSON 字符串时,服务器会引发异常(这会为您提供 500 内部服务器错误)。
因此,解决方案是在任何地方使用单一编码。 例如,要在任何地方都使用 JSON,只需在 JavaScript 代码中更改以下两行:
client.setRequestHeader("Content-Type", "application/json");
client.send(JSON.stringify(data));
除了你的 500 或者它甚至可以修复它:
你最好使用$.ajax()
:
function httpPOST(data){
$ajax({
url: "/restaurants/login/"; // always relative path!
type: "post",
data: {data: data}
}).done(function(response){
if(data.ok == 'ok'){
alert(data.response);
}
});
}
aa和你的views.py
from django.core.serializers import json
@csrf_exempt
def logtrans(request):
data = {}
if request.method == 'POST':
print request.POST.get('data')
data['ok'] = 'ok'
data['response']= 'Done'
return HttpResponse(json.dumps(data), content_type="application/json")
data['ok'] = 'bad'
data['response']= 'not post request'
return HttpResponse(json.dumps(data), content_type="application/json")
顺便说一句,我不会csrf_exempt
,要小心。
代码使用“Content-Type”、“application/x-www-form-urlencoded”,因此您的 POST 数据应采用 name : value 对的形式,并使用 encodeURI(data) 或 escacpe(data) 进行 urlencoded。
这篇文章有一般答案我应该对 POST 数据进行 URL 编码吗? 并且还有指向具体细节的链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.