Ajax POST не работает / Twisted - PullRequest
1 голос
/ 02 мая 2011

Twisted.Web и AJAX Подобная тема уже выходит. Я даже взял оттуда код, но у меня та же проблема, скрученный сервер работает как чудо, но не могу понять, почему я не могу получить его с помощью ajax. В аналогичной ветке он говорит, что предупреждение выходит, но без данных. Для меня даже предупреждение не всплывает, еще одна функция Ajax работает, так что в целом с Ajax все в порядке, но именно с получением что-то идет не так.

Как также сказано в аналогичной теме, я могу получить его с помощью curl - $ curl --url http://localhost:8082/test -v, и он показывает привет мир, поэтому серверы работают нормально на 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 . Питер Ле Бек ответил как правильный, а Darkporter проголосовал =) от меня.

Ответ: Ответ Питера работает «из коробки», только то, что меня немного смутило, была строка, где вы должны были указать статическую папку. Это легко ... просто отделите любую папку там, поместите туда index.html, и он станет корневым каталогом, когда вы получите к нему доступ в Интернете.

Ответы [ 2 ]

5 голосов
/ 02 мая 2011

Ваш 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>

Вероятно, вы все равно будете соблюдать междоменное ограничение HTTP-запроса , упомянутое darkporter, чтобы решить эту проблему для своей веб-страницы, используя тот же сервер Twisted:

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()
4 голосов
/ 02 мая 2011

Служит ли страница, на которой живет ваш JavaScript, с того же хоста и порта?Если нет, у вас возникнет проблема с несколькими доменами.

...