【问题标题】:sending JSON to google app engine datastore将 JSON 发送到谷歌应用引擎数据存储
【发布时间】:2026-01-16 09:55:02
【问题描述】:

所以我一直在搜索互联网,但找不到任何适合我的东西。我有一个简单的 html 表单,需要通过 JSON 发送到应用引擎数据存储区。

HTML 表单:

<form method="get" name="vehicle-form" id="vehicle-form">
            <input type="text" name="type" placeholder="Vehicle Type" requried>
            <input type="text" name="make" placeholder="Make" requried>
            <input type="text" name="model" placeholder="Model" requried>
            <input type="text" name="year" placeholder="Year" requried>
            <button id="submit-btn">Add</button>
</form>

Javascript:编辑: 改变了这个 - 现在所有的值都为 null

var formData = {};
            $("#part-form").serializeArray().map(function (x) { formData[x.name] = x.value; });

            //var par = document.getElementById("test2");
            //par.innerHTML += "<p>";
            //for (var i in formData) {
            //    par.innerHTML += formData[i] + "<br>";
            //}
            //par.innerHTML += "</p>";
            var uriString = myUrl;
            $.ajax({
                url: uriString,
                type: "POST",
                //data: JSON.stringify(formData)
                data: { "type" : formData[0], "quantity" : formData[1], "cost" : formData[2], "vehicle_id" : formData[3] }
            });

我在windows 8手机上做这个,成功函数没有执行,也没有数据添加到数据存储区。

这是 POST 请求的后端代码

class AddVehicle(webapp2.RequestHandler):
def post(self):
    """Creates a vehicle entity

    POST Vehicle Variables:
    vehicle_type = vehicle type - required
    make = Make - requried
    model = Model - required
    year = Year - required
    """
    new_vehicle = Vehicle()
    vehicle_type = self.request.get('type', default_value=None)
    make = self.request.get('make', default_value=None)
    model = self.request.get('model', default_value=None)
    year = self.request.get('year', default_value=None)

    # all required info
    new_vehicle.vehicle_type = vehicle_type
    new_vehicle.make = make 
    new_vehicle.model = model 
    new_vehicle.year = year 

    self.response.write(new_vehicle)

    # post data into datastore
    key = new_vehicle.put()
    out = new_vehicle.to_dict()
    self.response.write(json.dumps(out))
    return

这是ndb模型

class Vehicle(ndb.Model):
vehicle_type = ndb.StringProperty(required=True)
make = ndb.StringProperty(required=True)
model = ndb.StringProperty(required=True)
year = ndb.StringProperty(required=True)

【问题讨论】:

  • 什么意思?你有后端的东西吗?
  • 是的,我正在通过后端的谷歌应用引擎使用网络 API。我无法让它将数据发布到数据存储区
  • 那你能显示你的后端代码吗?它收到请求了吗?
  • 首先做一些基本的调试,检查服务器日志,看看你的代码是否甚至用 POST 调用你的服务器。如果是,日志中是否有错误?如果是,那么就是你的问题。如果不是,那么首先在后端代码中放置日志语句,看看发生了什么。
  • 检查了服务器日志,它正在获取请求。我收到一个 BadValueError(实体具有未初始化的属性:make、vehicle_type、model、year)。谷歌表示它没有获得所需的车辆参数。将 required 更改为 False。

标签: javascript json ajax google-app-engine google-cloud-datastore


【解决方案1】:

让它工作:

$.ajax({
                url: uriString,
                type: "POST",
                contentType: "application/x-www-form-urlencoded", //<-- THIS
                data: { type: vehicle_type, make: vehicle_make, model: vehicle_model, year: vehicle_year },
                success: function (result) {
                    WinJS.Navigation.navigate("/pages/vehicleAdd/vehicleAdd.html");
                }
            });

原来我需要发送 url 编码的表单数据而不是 json...

【讨论】:

    最近更新 更多