Как обновить базу данных с помощью jQuery, не обновляя страницу? - PullRequest
0 голосов
/ 08 октября 2011

Как отправить эту функцию display_false() на сервер с помощью jQuery, чтобы база данных обновлялась без обновления страницы?

    def display_false():
        if display == "false":
            main_id = self.request.get("main_id")
            k = Main.get_by_id(int(main_id))
            k.display = False
            k.put()

    display_false()    

Сначала я скрываю строку таблицы с помощью этого jQuery ( см. Мой предыдущий вопрос ):

$(document).ready(function() {

    $("a.false").click(function(e) {
    $(this).closest("tr.hide").hide("slow");
    e.preventDefault();

});

и затем я хочу обновить свойство «display» в базе данных на «false» с display_false(), чтобы элемент не отображался.

И это HTML, где ссылка скрытия:

    for item in e:
        main_id = item.key().id()
        ...
        <tr class="hide">
        ...
        <a class="false" href="/useradminpage?main_id=%s&display=false"><span class="small">(hide)</span></a>
        ...
        </td>
        </tr>
        ...

Спасибо!

Обновление

Это то, что я пытался согласно ответ Павла , но это не работает.

$(document).ready(function() {

    //hide the row
    $("a.false").click(function(e) {
    $(this).closest("tr.hide").hide("slow");
    e.preventDefault();


});

    $("a.false").click(function() {
    //ajax server call
    $.ajax({
    url: "/useradminpage?main_id=%s&display=false",
    success: function(data) {
    //do some stuff.
    display_false()
    alert('returned');
  }
});
});


});

Обновление

Я ставлю оповещения, чтобы посмотреть, что работает, как предложил Павел. Оповещения 1, 2 и 3 работают, но 4 не работает:

$(document).ready(function() {
    alert("1 - document ready is called")
    $("a.false").click(function(e) {
    $(this).closest("tr.hide").hide("slow");
    e.preventDefault();
    alert("2 - row is hidden")

});

    $("a.false").click(function() {
    //ajax server call
    alert("3 - ajax server call")
    $.ajax({
    url: "/useradminpage?main_id=%s&display=false",
    success: function(data) {
    //do some stuff.
    display_false()
    alert(4 - "returned");
  }
});
});


});

Обновление

Это часть кода для этого раздела таблицы; Я пытаюсь получить main_id и передать его вызову ajax:

#-----------main table------------#

            main_id = self.request.get("main_id")

            self.response.out.write("""<table class="mytable">
            <tr class="head">
            <th  width="80%">links</th><th>edit tags</th>
            </tr>    
            """)        

            query = Main.all()
            query.filter("owner", user)
            query.filter("display", True)
            query.order("-date")
            cursor = self.request.get("cursor")
            if cursor: query.with_cursor(cursor)
            e = query.fetch(100)
            cursor = query.cursor()

            for item in e:
                main_id = item.key().id()
                self.response.out.write("""
                <tr class="hide">
                <td><a href="%s" target="_blank">%s</a><span class=small> (%s) </span><br />
                <span class=small>%s</span>
                <a href="/edit?main_id=%s"><span class="small">(edit)</span></a>
                <a class="false" href="/useradminpage?main_id=%s&display=false"><span class="small">(hide)</span></a>
                <a href="/comment?main_id=%s"><span class="small">(comments)</span></a></td>
                <td><a href="/tc?url=%s&main_id=%s&user_tag_list=%s" title="edit tags">%s</a>
                </td>
                </tr>
                """ % tuple([item.url, item.title, urlparse(item.url).netloc,
                f1.truncate_at_space(item.pitch), main_id, main_id, main_id,
                item.url, main_id, (", ".join(item.tag_list)),
                (", ".join(item.tag_list)),]))

            self.response.out.write("""</tbody></table>""")    

            display = self.request.get("display")
            def display_false():
                if display == "false":
                    main_id = self.request.get("main_id")
                    k = Main.get_by_id(int(main_id))
                    k.display = False

                    k.put()

            display_false()    

Обновите после обсуждения с Полом, чтобы получить идентификационный номер скрытой строки:

<script>

$(document).ready(function() {
    alert("1 - document ready is called")

    $("a.false").click(function(e) {
    $(this).closest("tr.hide").hide("slow");
    e.preventDefault();
    alert("2 - row is hidden")
});



    $("a.false").click(function() {

    alert(this.attr("title"));

    $.ajax({
    url: "/useradminpage?main_id=%s&display=false",

    success: function(data) {
    display_false()
    alert(4 - "returned");
  }
});
});
});


</script>

Ответы [ 2 ]

3 голосов
/ 08 октября 2011

Вам понадобится вызов AJAX, что-то вроде этого после включения ваших библиотек jQuery.

$(document).ready(function() {

//false click action
$("a.false").click(function () { 

//ajax server call
$.ajax({
  url: '/useradminpage?main_id=%s&display=false',
  success: function(data) {
    //do some stuff.
    alert('returned');
  }
});

});



});
3 голосов
/ 08 октября 2011

Вы не можете обновить базу данных сервера с помощью JQuery. Все, что вы можете сделать, это отправить запрос, который обрабатывается сервером.

Используйте JQuery.Ajax или любые дополнительные функции этой функции для отправки запроса. На ваш сервер это будет выглядеть как обычный запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...