2015-02-19 1 views
1

У меня есть путаница в отношении того, как серверы (механизм приложения) реагируют на запросы AJAX GET и POST. Я хочу отправить запрос GET на свой сервер и вернуть данные JSON.Ответы на запросы AJAX GET и POST с Google App Engine (Python)

Вот это AJAX GET Request

function syncRestoreLinks(e) { 

    var request = new XMLHttpRequest(); 
    var url = "/sync" 

    request.open("GET", url); 
    request.setRequestHeader("Content-Type", "application/json"); 

    request.onreadystatechange = function() { 
    if (request.readyState === 4) { 
     console.log(request.responseText); 
     } 
    } 
    request.send(null); 
    console.log("Getting links from db"); 
} 

Handler на стороне сервера

class SyncHandler(Handler): 
    def get(self): 
     response_data = {"loggedIn":False, "linkData":None, "success":False} 
     json_txt = json.dumps(response_data) 
     self.response.headers['Content-Type'] = 'application/json; charset=UTF-8' 
     self.response.out.write(json_txt) 

    def post(self): 
     response_data = {"loggedIn":False, "linkData":None, "success":False} 
     json_txt = json.dumps(response_data) 
     self.response.headers['Content-Type'] = 'application/json; charset=UTF-8' 
     self.response.out.write(json_txt) 

Этот обработчик записывает мои данные ответа к экрану, где, как я хочу, чтобы отправить его обратно, и пусть JS справится с этим. (Я могу использовать переадресацию сервера здесь.)

Если я делаю запрос POST, код работает так, как я его намерен. Но здесь я не могу делать перенаправления серверов или страниц рендеринга, и этот контроль имеет только запрос на выполнение скрипта.

Это как работает ответ GET/POST, или я делаю что-то глупое в своем коде?

Есть ли способ для ответа GET не писать на странице и не отправляться в JS? В приведенном выше коде responseText представляет собой пустую строку, но json выводится на экран.

+0

Вы используете webapp2 для связывания url '/ sync' с' SyncHandler'? –

+0

yes, webapp2 и python 2.7 –

ответ

1

Я делаю AJAX Получить запросы успешно с движком приложения прямо сейчас.

Ваш обработчик синхронизации выглядит правильно. Вы уверены, что это называется? Добавьте заявление logging.info(), чтобы убедиться. Если он вызывается, то я подозреваю, что ошибка находится на передней панели. Я использую jQuery, а не XMLHttpRequest, поэтому я не могу вам помочь в этом. Мой вызов jQuery выглядит так:

$.get(url, callback_function, 'json'); 
+0

ли ваш ответ response.out.write отправляет данные json обратно в функцию JS или печатает его на экране? –

+0

Он отправляет данные JSON обратно. –

0

Вы можете добавить обработчик POST к вашему SyncHandler так:

def post(self): 
    ... 
    self.response.out.write(json_txt) 

Странная часть что ваш запрос POST не должен работать без этого кода, чтобы обработать запрос. Вы только показываете метод get() в своем коде.

+0

Я думаю, что я не очень точно сформулировал свой вопрос. Я не показывал метод post в своем коде, но, как вы говорите, это то же самое, что и get. Я хотел знать, почему эти запросы работают таким образом. Более общий вопрос о запросах AJAX. –

+1

О, теперь я понимаю ваш вопрос. Можно указать перенаправление по запросу POST, если вы отправляете код состояния 307, как указано здесь: http://programmers.stackexchange.com/q/99894/144312 –

+0

Ответ AJAX должен быть объектом JSON, а не обработанной страницей , –

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

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