2011-05-01 88 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