如何将JSON发送到我的python脚本?

时间:2014-07-21 05:08:31

标签: javascript python ajax json

目前我正在使用此功能从Chrome扩展程序发送我的JSON。这是javascript发送数据的客户端代码。

function callPython(){
    var url  = 'http://AWS_IPNUMBER/';
    var data = {'bob':'foo','paul':'dog'};
    $.ajax({
        url: url,
        type: 'POST',
        contentType:'application/json',
        data: JSON.stringify(data),
        dataType:'json',
        success: function(data){
            var jsonObj = $.parseJSON(data);
            alert(jsonObj.encPassword);
        },
        failure: function(errorMsg) {
            alert(errorMsg);
        }
    });
}

这是Python的服务器代码:

s = socket()
s.bind(('', 80))
s.listen(4)
ns, na = s.accept()

while True:
    try:
        data = ns.recv(8192)
    except:
        ns.close()
        s.close()
        break

    data = json.loads(data)
    print data

问题在于,虽然正在倾听,datadata = ns.recv(8192)处为空。然后data = json.loads(data)无效,因为data为空。为什么是这样?我认为这可能是我在AWS上的安全组的问题,但如果我转到http://AWS_IPNUMBER/,我会在运行python脚本时从浏览器中获取标题。

2 个答案:

答案 0 :(得分:1)

您可以通过tornadodjango这样的优秀框架获得更好的运气。

我这样说是因为在你的代码中你试图用json.loads解析一个http POST。 HTTP并不那么简单。在到达正文之前,您需要处理请求和标题,这可以分布在多个数据包中。当您可以从完善的项目中设置符合标准的服务器时,为什么要尝试重新发明轮子。

答案 1 :(得分:1)

$ .ajax函数将放置的数据是一个完整的HTTP请求,json.loads()无法理解。在这种情况下,您需要实例化一个HTTP服务器,该服务器将处理HTTP请求,然后使用json.loads()处理HTTP有效负载。