【问题标题】:Changing POST Request to GET to Send a JSON File for Caching将 POST 请求更改为 GET 以发送 JSON 文件进行缓存
【发布时间】:2015-12-16 03:27:42
【问题描述】:

如何修改以下代码,以便发送包含适当数据的 JSON 文件?

我问的原因是因为 POST 请求似乎没有被缓存,这对我来说是个问题。我想使用 GET 来缓存 JSON 文件。基本上,这个查询所做的是它获取视口的当前边界并基于此从数据库 (MongoDB) 中获取数据。

我尝试在关闭追加之前添加+ ".json",但它不起作用。

myJSON.append({"type":"Feature","geometry":obj["geometry"],"properties":{"Address":obj["properties"]["Address"],"ID":obj["properties"]["ID"]}})

这是完整的代码:

@app.route('/getData', methods=['POST','GET'])
def getData():
    myCollection = db["myCollection"]
    bBox = [json.loads(request.data)]
    myJSON = []

    for obj in myCollection.find({"geometry":{"$geoWithin": {"$geometry": {"type" : "Polygon" ,"coordinates": bBox}}}},{"properties.Address":1,"properties.ID":1,"geometry":1}):
        myJSON.append({"type":"Feature","geometry":obj["geometry"],"properties":{"Address":obj["properties"]["Address"],"ID":obj["properties"]["ID"]}})

    return jsonify(data = {"type":"FeatureCollection", "features":myJSON})

在客户端,AJAX 请求如下所示:

bounds = getBoundingBox();
$.ajax({
    url: '/getData',
    type: 'POST',
    data: JSON.stringify(bounds),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function (data) {
        // add data here
    }
});

【问题讨论】:

  • 获取请求通常不包含正文,数据通常存在于 URL 中。您确定您的服务器正在为上述 get 请求查找正文中的数据吗?

标签: json ajax mongodb pymongo


【解决方案1】:

您需要将JSON 数据作为 GET 参数发送,并且它需要一个名称

$.ajax({
    url: '/getData',
    type: 'GET',
    data: {bounds: JSON.stringify(bounds)},
    success: function (data) {
        // add data here
    }
});

然后在您的服务器端,您检索您的 bounds GET 参数并将其用于您的 json.loads 函数。

【讨论】:

  • 所以在服务器端,bBox = [json.loads(request.data)] 这一行应该是bBox = [json.loads(bounds)]?
  • @mapr 我不熟悉您的服务器框架,但我认为变量bounds 不会出现。您应该查看有关如何检索 GET 参数的文档。
猜你喜欢
  • 1970-01-01
  • 2018-01-10
  • 2021-11-01
  • 2021-01-16
  • 1970-01-01
  • 2019-08-15
  • 2021-02-17
  • 1970-01-01
  • 2012-09-22
相关资源
最近更新 更多