0

我想针对在 Flask 上运行的 RESTful API 使用类型为“GET”的 jQuery 的 ajax 调用。在我的请求中,我想将一些数据作为 JSON 发布。

我正在为 POST 请求做同样的事情,它们就像魅力一样工作。但是使用 GET Flask 给了我 400 个错误,并且深入研究它似乎 JSON 在途中被部分 URIEncoded ({%22email%22:%22some@email.com%22})。

我尝试使用 decodeURIComponent,因为我正在 JSON.stringifying 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
    }
});

这让我发疯,因为我似乎无法在这个星球上找到遇到同样问题的任何人。我以前一直在 ajaxing 请求,过去从未遇到过这种愚蠢的事情。

编辑:好的,看来我需要放弃我的目标,只需将任何参数作为查询字符串传递,而不是尝试将它们添加到请求正文中。我想这没有什么问题,例如这里讨论的:REST API 最佳实践:在哪里放置参数?

4

2 回答 2

2

我怀疑您想附加jsonData为查询参数。为此,您无需对其进行编码。

$.ajax({
  ...
  data: jsonData,
  ...
 });

您生成的 URL 将类似于

http://someserver/sessions/123abc?email=foo%40bar.com
于 2012-08-25T19:47:01.543 回答
1

如果您尝试将任何数据设置为 ajax 的 GET 请求,它将被转换为 URL 字符串的参数。当然,像 " 这样的任何符号都将表示为 %URL_CODE (查看所有代码),您将得到如下查询:

http://someserver/sessions/sessiontoken?{%22email%22:%22some@email.com%22}

组织 restful 服务的最佳方式是在 URI 部分中描述查询。另一种方法可以将 json 放入 URL 参数中,并在服务器端解析符号的 url 代码。

于 2012-08-25T19:46:23.040 回答