将json嵌入到jquery ajax GET请求中

时间:2012-08-25 19:33:39

标签: jquery ajax rest decode encode

我想对我在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?

2 个答案:

答案 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代码。