2011-05-01 90 views
1

Twisted.Web and AJAX 类似的线程已经退出。我甚至从那里拿了代码,但是我也遇到了同样的问题,扭曲的服务器像魅力一样工作,但无法弄清楚为什么我不能用ajax获取它。在类似的线程中,他说警报出来了,但没有数据。对于我来说,即使警报不会弹出,但另一个Ajax功能的作品,所以一般来说,与Ajax的一切都好,但正是与提取的东西出错。Ajax POST不工作/扭曲

正如也在类似的线程中所说,我可以使用curl来获取它 - 并且它显示hello world,所以服务器可以正常工作100%。

任何想法?

<script type="text/javascript"> 
// Submit button 
$(function(){ 
    $.ajax({type: "POST", 
    $('a').click(function(){ 
     url: "http://localhost:8082/test", 
     data: {}, 
     success: function(data) {alert("Success:" + data);} 
    }); 
    }); 
}); 
</script> 

<html> 
[...] 
    <a href="#">Load Favorites Movies</a>... 
[...] 
</html> 

server.py

from twisted.web import server, resource, http 

class RootResource(resource.Resource): 
    def __init__(self): 
     resource.Resource.__init__(self) 
     self.putChild('test', TestHandler()) 

class TestHandler(resource.Resource): 
    isLeaf = True 

    def __init__(self): 
     resource.Resource.__init__(self) 
    def render_GET(self, request): 
     return self.render_POST(request) 
    def render_POST(self, request): 
     return "hello world!" 

if __name__ == "__main__": 
    import sys 
    from twisted.internet import reactor 
    reactor.listenTCP(8082, server.Site(RootResource())) 
    reactor.run() 

非常感谢彼得乐贝克Darkporter。 Peter Le Bek asnwer标记为正确,Darkporter向我投票。

答案:Peter的答案开箱即用,只是让我困惑的一点是线,你必须指定静态文件夹。这很简单...只需将其中的任何文件夹置于其中,然后放置index.html,并在您访问网络时将其放在根目录中。

回答

5

JavaScript是错位的,试试这个:

wwwdir/index.html的

<html> 
<head> 
    <script src="http://code.jquery.com/jquery-1.5.2.min.js"></script> 
</head> 
<body> 
    <a href="#">click me</a> 
    <script type="text/javascript"> 
    $('a').click(function(){ 
    $.ajax({type: "POST", 
      url: "http://localhost:8082/test", 
      data: {}, 
      success: function(data) { alert("Success: " + data); } 
    }); 
    }); 
    </script> 
</body> 
</html> 

你可能仍满足cross-domain HTTP request restriction通过darkporter提到,要解决这个使用服务您的网页同样扭曲的服务器:

server.py

from twisted.web import server, resource, http, static 

class TestHandler(resource.Resource): 
    isLeaf = True 

    def __init__(self): 
     resource.Resource.__init__(self) 
    def render_GET(self, request): 
     return self.render_POST(request) 
    def render_POST(self, request): 
     return "hello world!" 

if __name__ == "__main__": 
    import sys 
    from twisted.internet import reactor 

    root = static.File('/path/to/wwwdir') 
    testHandler = TestHandler() 
    root.putChild('test', testHandler) 
    reactor.listenTCP(8082, server.Site(root)) 
    reactor.run() 
+0

我来试试你的解决方案。但我想你们都对1件事情是正确的。我从另一个IP提供页面。但即使我服务于同一台服务器,它仍然无法正常工作,这是我做到的。那么也许你的例子wirk工作。我将稍后发布 – Viktor 2011-05-02 07:04:55

+0

如果您希望浏览器将其作为同一个域接受,您需要从相同的IP端口提供服务。仅有相同的IP是不够的。 – 2011-05-02 08:03:34

+0

我做到了。非常感谢你 。你是对的。同样的端口和IP是必要的。当然,它带给我另一个问题,如何使用这样的事情可以说与Django框架,我从80端口Apache服务。但多数民众赞成我想另一个故事=) – Viktor 2011-05-02 09:36:20

4

您的JavaScript所在的页面是由相同的主机和端口提供的吗?如果没有,你会遇到跨域问题。

+0

没有。我的服务器运行在端口12345上说192.168.0.196。但是页面在我的主计算机192.168.0.199上。一切都落后于真实的ip可以说24.124.41.23。端口12345被转发到192.168.0.196,所以如果我请求真正的IP 24.124.41.23:12345我会看到与ehllo世界,哪个服务器服务的页面。你能解释一些关于跨域问题的更多信息吗? – Viktor 2011-05-02 06:45:36

+0

这只是浏览器都遵循的限制。如果您加载了一些HTML页面,那么从该浏览器的角度来看,该页面中的XMLHttpRequests(Ajax调用)只能转到某个主机和端口。这就是为什么使Ajax调用“/ ajax/whatever”很好,这会自动进入同一个主机和端口。 – jpsimons 2011-05-03 01:38:45

+0

为什么不直接运行扭曲的所有东西?这样你只有一件东西可以绑定到端口80.如果你是一个Django粉丝,我发现模板引擎Tempista非常好,并且它具有类似语法的Django模板。 – jpsimons 2011-05-03 01:41:36