2015-01-03 2 views
0

Мне нужно вызвать некоторую функцию python и показать ее результаты (на самом деле пара списка объектов) в div id = "places" раздел. Я пытаюсь сделать это в функции Javascript show_sec(), но я не могу узнать, как поймать данные с сервера и обработать его на клиенте.Отправлять данные от сервера к клиенту - ajax

Моя задача очень простая и простая, но поскольку это мой первый веб-проект, мне нужна помощь с ajax. Пожалуйста, помогите мне.

Это часть моего кода:

.html

{% include "header.html" ignore missing %} 

<!-- contents of nearest banks page --> 
    <section id="ask_user"> 
      <div id="question">Разрешить приложению определить Ваше место расположения для нахождения ближайших банков?</div> 
      <div id="buttons"> 
       <input type="button" name="yes" value="Да, разрешить" onclick="show_sec()"/> 
       <input type="button" name="no" value="Нет, не разрешать" onclick="dnt_show_sec()"/> 
      </div> 
    </section> 

     <section id="allowed" style="display:none;"> 
      <div id="map_canvas"></div> 
      <div id="nearest_banks"> 
       <form action="/nearest_banks/radius" method="get" id="send_radius"> 
        Курс ближайших банков на сегодня в радиусе 
        <input type="text" name="radius" id="radius" size="5" value={{radius}} > 
        <input type="submit" class="button" value="V"> 
        метров 
       </form> 
       <div id="check"> {{output}}</div> 
       <div id="places"> </div> 
      </div> 
     </section> 

     <section id="not_allowed" style="display:none;"> 
      <div class="question"> Приложение не имеет возможности определить близ лежащие банки.<div> 
     </section> 


</body> 

<script type="text/javascript"> 

    /* frm.submit(function() { 
     $.ajax({ 
      type: frm.attr('method'), 
      url: frm.attr('action'), 
      data: frm.serializeArray(), 
      cache: false, 
      success: function() { 
       $("#check").html("OK!!!"); 
      }, 
      error: function(data) { 
       $("#check").html("Something went wrong!"); 
      } 
     }); 
     return false; 
    }); */ 

    function show_sec() { 
     document.getElementById('allowed').style.display = "block"; 
     document.getElementById('ask_user').style.display = 'none'; 
     $.ajax({ 
      type: "get", 
      url: "/nearest_banks/radius", 
     }).success(function(data) { 
      $("#places").html(data); 
      /*alert ("OK !!!"); */ 
     }); 

    } 

    function dnt_show_sec() { 
     document.getElementById('not_allowed').style.display = "block"; 
     document.getElementById('ask_user').style.display = 'none'; 
    } 


    $(document).ready(function(){ 
     $("button#yes").click(function(){ 
      //alert("demo_test"); 
      $("section#allowed").show(); 
     }); 
    }); 
</script> 

функция питона я пытаюсь позвонить:

*def get(self): 
     default_radius = 1000 
     radius = get_radius(self) 
     exceptions = [u'', 'error', 0]     # invalid values for radius 
     if any([radius in exceptions]): 
      radius = default_radius 
      #warning = "Вы ввели неверный радиус. Система автоматически заменила его на стандартный." 
      output = radius        # заменить на вывод банков 
     else: 
      #warning = '' 
      output = radius        # заменить на вывод банков 
     names, location = Findplaces(self, radius) 
     body_values = { 
      'names': names, 
      'location': location, 
      'radius': radius, 
      'output': output, 
      #'warning': warning, 
     } 
     template = jinja_env.get_template('nearest_banks.html') 
     self.response.out.write(template.render(body_values))* 

Короче моей целью является отображение имен и местоположение в тегах div id = "places" после нажатия на Да кнопка.

Или, может быть, я могу инициировать отображение определенных тегов с сервера с помощью jinja2 в моей функции python.

Пожалуйста, помогите мне. Я потратил на это время, но не могу заставить его работать красиво. Заранее спасибо !

EDIT:

Когда я нажимаю на Да кнопки на show_sec функция загружает раздел с идентификатором разрешены. Проблема: Действие в форме не обрабатывается. Так отображается только html, но данные с сервера не принимаются.

+0

Вы проверили консоль разработчиков? Каков ответ ajax-запроса? Каково значение 'data' в' show_sec'? –

+1

Вы не объяснили, что работает или не работает, или какая у вас проблема – charlietfl

+0

Извините, отредактировал мой вопрос. u_mulder, данные содержат html-код ... Как и все теги html, которые я показал выше – Elena

ответ

0

Поскольку URL-адрес «/ ближайшее_банки/радиус», и это получить, попробуйте открыть его в браузере, чтобы увидеть, что появляется. Возможно, вам нужно будет просмотреть исходный текст на возвращенной странице для правильного просмотра. Сначала вы должны проверить функциональность веб-сервиса, что он что-то возвращает, и возвращает правильную вещь.

После этого в вашей функции show_sec выполните пробную версию и ошибку, чтобы узнать, что произойдет. Если вы перемещаете запрошенный контент по тому же пути, что и страница-исполнитель, это имеет значение?

+0

Да, я сделал чек. Моя функция сервера работает хорошо, я просто не могу узнать, как отображать ее результаты с помощью jQuery ... – Elena

+0

Я использую чистый javascript самостоятельно. Попробуйте создать экземпляр объекта xmlhttp и получить его. Возможно, вы сможете увидеть ошибки лучше. Затем, если вы хотите сохранить jquery, вы узнаете, какие изменения внести. – subjectivist

+0

@dmcdivitt вы можете использовать [jqXHR.fail (функция (jqXHR, textStatus, errorThrown) {});] (http://api.jquery.com/jquery.ajax/), чтобы увидеть ошибки. И, кстати, ваш ответ выглядит как комментарий, а не как ответ. – Regent

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