如何将数据从JavaScript发送到Python

如何将数据从JavaScript发送到Python,javascript,python,google-app-engine,Javascript,Python,Google App Engine,我在jinja2和python2.7上使用GAE进行web开发 我可以从Python中获取数据。但我未能将数据从JavaScript发送到Python。以下是JavaScript代码: function toSave() { var val_no = $('#field-no').val(); var val_name = $('#field-name').val(); var val_address = $('#field-address').val(); va

我在jinja2和python2.7上使用GAE进行web开发

我可以从Python中获取数据。但我未能将数据从JavaScript发送到Python。以下是JavaScript代码:

function toSave() {
    var val_no = $('#field-no').val();
    var val_name = $('#field-name').val();
    var val_address = $('#field-address').val();
    var val_phone = $('#field-phone').val();
    var val_car = $('#field-car').val();
    var val_penalty = $('#field-penalty').val();

    $.ajax({
        type: 'GET',
        url: "https:/test/User_update",
        data: {
            "no": val_no,
            "name": val_name,
            "address": val_address,
            "phone": val_phone,
            "car": val_car,
            "penalty": val_penalty
        },
        dataType: "json"
    }).done(function () {
        $('#modal-1').modal('hide');
        table.row.data([val_no, val_name, val_address, val_phone, val_car, val_penalty, UserIndex_CreateEditButton(val_no, val_name, val_address, val_phone, val_car, val_penalty), UserIndex_CreateDeleteButton(val_no)], $('#' + tempUpdate));
    });
}
Python代码(main.py中的类User_update):


如何从Python获取JavaScript数据?

看起来您试图使用错误的方法发布数据。您应该使用POST而不是GET向服务器发送数据

$.ajax({
    type: 'POST',
    url: "https://firststep-2016.appspot.com/User_update",
    data: {
        "no": val_no,
        "name": val_name,
        "address": val_address,
        "phone": val_phone,
        "car": val_car,
        "penalty": val_penalty
    },
    dataType: "json"
}).done(function () {
    $('#modal-1').modal('hide');
    table.row.data([val_no, val_name, val_address, val_phone, val_car, val_penalty, UserIndex_CreateEditButton(val_no, val_name, val_address, val_phone, val_car, val_penalty), UserIndex_CreateDeleteButton(val_no)], $('#' + tempUpdate));
});
然后在Python服务器中处理传入的数据

def post(self):
    ....
HTTP方法 首先,很好地理解了通信一般是如何工作的

HTTP有多种方法,如GET和POST(请参阅)

在这种情况下,适用于您的相关方法:

  • GET用于只读请求。与其他HTTP方法不同,GET请求不包含发送到服务器的数据。所有数据都将通过URL参数发送。在某些情况下,也作为标题的一部分。GET请求可以重复或缓存,因为它们是只读的。这就是为什么它们不应该用于更新

  • POSTPUT可以更新数据,通常POST用于创建对象,而PUT用于更新现有对象。这两种HTTP方法都接受包含数据的正文

由于您正在更新用户,PUT似乎是合适的

通过jQuery的ajax向服务器发送数据 大多数开发人员可能会这样认为,但列出所有直接依赖项是值得的,在这种情况下,您似乎使用jQuery获取值并将请求发送到服务器。特别是
$.ajax

作为
数据
属性的文档:

要发送到服务器的数据。如果尚未转换为字符串,则会将其转换为查询字符串。它被附加到GET请求的url

因此,即使GET不接受正文,jQuery也会为您将其添加到URL中。如前所述,我建议不要使用GET进行更新

此时,您可以使用浏览器的开发人员工具来检查网络请求。这样,您将看到发送到服务器的确切内容

在服务器中接收数据 我相信您使用的API是:

您应该能够像这样获得单个值(不会有“数据”参数):

对于PUTPOST来说,它应该是这样工作的():

安全 您的服务器代码易受攻击


这不是你问题的一部分,但相当严肃。我不会在公共服务器上提供该代码,如果现在是,我会将其删除,直到修复。

https://firststep-2016.appspot.com/User_update
link给出了500个内部服务器错误,看起来您的python codeDuplicate重定向有问题:我认为
jsonData=json.loads(self.get('data'))
应更改为
jsonData=json.loads(self.request.get('data'))
我们希望得到比我的代码不起作用更多的信息,请参阅了解如何在stackoverflowAnuj上提问:我已经尝试过了。
def post(self):
    ....
val_no = self.request.get("no")
val_name = self.request.get("name")
# ...
val_no = self.request.POST['no']
val_name = self.request.POST['name']
# ...