繁体   English   中英

无法在 HTTP POST 中发送字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM