我想对我在Flask上运行的RESTful API使用类型为'GET'的jQuery的ajax调用。在我的请求中,我想将一些数据发布为JSON。
我正在为POST请求做同样的事情,它们就像魅力一样。但是GET Flask给了我400个错误,并且深入研究它似乎JSON在途中部分被URIEncoded编码({%22email%22:%22some@email.com%22})。
我尝试使用decodeURIComponent,因为我是JSON。在ajax数据参数中对json进行了字符串化,但没有区别。
sessiontoken = "123abc";
jsonData = {"email": email};
$.ajax({
type: 'GET',
crossDomain: true,
url: 'http://someserver/sessions/' + sessiontoken,
dataType: 'json',
processData: false, //added this to see if it helps, it didn't
contentType: "application/json",
async: false,
data: JSON.stringify(jsonData),
success: function(data){
//I'd be happy
},
error: function(data){
//This is where I get as my backend throws a 400 on me due to the screwed up json
}
});
这让我疯了,因为我似乎无法找到这个星球上有同样问题的人。我以前一直在哄骗请求,过去从未遇到过这种愚蠢的事情。
编辑:好吧,似乎我需要放弃我的目标,只是将任何参数作为查询字符串传递,而不是尝试将它们添加到请求体。我想这里没有任何问题,例如:REST API Best practices: Where to put parameters?
答案 0 :(得分:2)
我怀疑您要将jsonData
附加为查询参数。为此,您无需对其进行编码。
$.ajax({
...
data: jsonData,
...
});
您的结果网址就像
http://someserver/sessions/123abc?email=foo%40bar.com
答案 1 :(得分:1)
如果您尝试将任何数据设置为ajax的GET请求,则会将其转换为URL字符串的参数。当然,任何符号如“将表示为%URL_CODE(see all codes)”,您将获得下一个查询:
http://someserver/sessions/sessiontoken?{%22email%22:%22some@email.com%22}
组织您的restful服务的最佳方式是URI部分中的描述查询。另一种方法是将json放入URL参数,并解析服务器端符号的URL代码。