我在编写Python REST服务器中的json响应问题

时间:2010-11-27 22:10:29

标签: python ajax json

对于我自己的教育,我正在创建一个简单的守护进程,它将作为REST服务器,在socket 9000上进行侦听。对于我的第一次测试,我正在尝试执行REST调用,只需在{{3}上执行GET }。

我破解的简单服务器可以获得请求,但我认为它发送的响应存在问题。我正在尝试将响应发送为JSON。服务器套接字的代码如下。下面是我用来制作JSON请求的jQuery代码。 Python服务器中的print语句确实以JSON格式打印一组有效的设置。页面加载时,不会调用Javascript中的警报。有什么想法吗?


Python:
    def socketThread(self):
        while 1:
            sock, address = self.serverSocket.accept()
            fs = sock.makefile()
            line = fs.readline();
            if line.startswith('GET /settings.json'):
                sock.sendall("HTTP/1.0 200 OK\r\n")
                sock.sendall("Content-Type: application/json\r\n")
                settings = json.dumps(self.currentSettings) #, indent=4
                sock.sendall("Content-Length: " + str(len(settings)) + '\r\n\r\n')
                sock.sendall(settings)
                print settings
                sock.close()

Javascript: $(document).ready(function() { $.ajax({ url: 'http://localhost:8080/settings.json', cache: false, success: function(json){ alert('json success ' + json); }, error: function(xhr, textStatus, errorThrown) { alert(xhr.statusText); } }); });

3 个答案:

答案 0 :(得分:3)

在发送内容之前,您需要返回200 OK HTTP响应和空行。

您可能也需要一些HTTP标头(Content-type显然是一个)。

但是,我会建议使用Python的许多HTTP库之一而不是自己实现协议。

答案 1 :(得分:2)

检查服务器是否实际被命中(例如,在代码中添加import pdb; pdb.set_trace()。我发现当服务器未运行(或在另一个端口上侦听)时,jQuery会执行带有空主体的成功回调。 ..)

答案 2 :(得分:1)

好吧,问题出在jQuery方面,我的请求被跨域原始保护问题所阻挠 - 我的请求是在不同端口上的localhost,所以jQuery没有拉下数据。现在我需要弄清楚如何使这项工作。谢谢你的帮助。