将JSON发送到谷歌应用引擎数据存储区

时间:2016-02-07 22:06:01

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

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

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)

1 个答案:

答案 0 :(得分:0)

让它发挥作用:

$.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 ...