2013-07-26 1 views
3

Я пытаюсь получить (последние) Web.py и AJAX, чтобы играть друг с другом, но до сих пор мне не повезло.Не удается заставить Web.py и jQuery выработать запрос AJAX GET (вместо этого он обращается к запросу OPTIONS)

Короче говоря, я запускаю как серверную (Web.py), так и клиентскую часть (Javascript) на своем локальном компьютере разработки, но почему-то все мои запросы AJAX GET отображаются как запросы OPTION. Из того, что я читал, это типичные случаи междоменных запросов, но поскольку я запускаю это на localhost, я не уверен, что происходит.

Вот код на стороне сервера:

import web 
import json 

def make_text(string): 
    return string 

urls = ('/', 'mainScreen', 
    '/update', 'update' 
) 

app = web.application(urls, globals()) 

global content 
content = {'key1': 'value1', 'key2': 'value2'} 

def getPayload(): 
    return content 

class mainScreen: 

    def GET(self): 
     web.header('Content-Type', 'application/json') 
     web.header('Access-Control-Allow-Origin', '*') 
     web.header('Access-Control-Allow-Credentials', 'true') 
     return getPayload() 

    def OPTIONS(self): 
     web.header('Content-Type', 'application/json') 
     web.header('Access-Control-Allow-Origin', '*') 
     web.header('Access-Control-Allow-Credentials', 'true') 
     return getPayload() 

class update: 
    def POST(self): 
     global content 
     content = web.input(_method='post') 
     return "DONE." 


if __name__ == '__main__': 
    app.run() 

Вот код на стороне клиента:

<html> 
    <head> 
     <title>WTF</title> 
     <script type="text/javascript" src="../static/jquery.js"></script> 
     <script type="text/javascript"> 

      function dial() 
      { 
       console.log("Fire in the hole!"); 

       $.ajax({ 
        url: 'http://0.0.0.0:8080', 
        contentType: 'application/jsonp', 
        timeout : 5000, 
        cache: false, 
        success: function (data) { 
         console.log('[ajax] Connection successful! ' + JSON.stringify(data)); 
        }, 
        error:function (jqXHR, textStatus, errorThrown){ 
         console.log(JSON.stringify(jqXHR) + ' ' + textStatus +' '+errorThrown); 
        } 
       }); 

       console.log("Done."); 
      } 


      $(function() { 
       dial(); 
      }); 

     </script> 
    </head> 
    <body> 
     <div id="container"></div> 
    </body> 
</html> 

Это выход Firebug в:

Пожар в отверстие! index.html (строка 9) СОВЕРШЕННО.
index.html (строка 24) [ajax] Соединение успешно! ""
index.html (строка 17)

Обратите внимание, что "" указывает, что запрос получили пустые данные.

Это то, что сеть панель Firebug показывает:

Firebug's network panel, showing the request

Если я открыть страницу, которая Firebug указывает на данные там хорошо, но если я, довольно просто открыть http://0.0.0.0:8080/ в любом браузере, данные отображаются в виде ожидается! Что здесь происходит?

Наконец, вот журнал web.py в:

[email protected]:~/Desktop/tut$ python app.py 
    http://0.0.0.0:8080/ 
    127.0.0.1:43796 - - [26/Jul/2013 11:14:59] "HTTP/1.1 OPTIONS /" - 200 OK 

Я кодирования в Ubuntu 12.04 LTS, кстати.

PS: Я также попытался изменить заголовок ответа в web.py на:

web.header('Content-Type', 'text/plain') 

, но это не сработало.

PS2: Изменение адреса сервера на клиентском скрипте на «127.0.0.1:8080» или «localhost: 8080» тоже не помогло.

ответ

1

Пригвожден.

Вопрос был на клиентском коде. Я удаляю contentType из самого запроса, и он отлично работает.

 Смежные вопросы

  • Нет связанных вопросов^_^