Как получить обновленные данные с сервера без перезагрузки страницы в web2py - PullRequest
1 голос
/ 28 октября 2011

Я сделал функцию панели поиска в приложении web2py, получая результаты из базы данных.Однако, если содержимое базы данных изменяется, когда страница открыта, ее необходимо перезагрузить, чтобы отразить другое содержимое.Мой вопрос заключается в том, как я могу читать содержимое базы данных в переменные javascript без перезагрузки страницы, через ajax или json или что-то подобное.

В настоящее время я использую такой контроллер:

def testDB():
        valA=[]
        valB=[]
        valC=[]
        for x in db().select(db.products.ALL):
            valA.append(x.prdA)
            valB.append(x.prdB)
            valC.append(x.prdC)
        return dict(VA=valA, VB=valB, VC=valC)

С представлением, извлекающим данные следующим образом:

{{valA=VA}} {{valB=VB}} {{valC=VC}}
A = {{=XML(response.json(valA))}}
B = {{=XML(response.json(valB))}}
C = {{=XML(response.json(valC))}}

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

function loadFromDB(){
jQuery.ajax({
type:"POST",
    url:'testDB',
    success: function(msg){      
    {{
    valA=VA
    valB=VB
    valC=VC
    }}
    A = {{=XML(response.json(valA))}}
    B = {{=XML(response.json(valB))}}
    C = {{=XML(response.json(valC))}}
    },
    error: function(errormessage){alert("Error in retrieving from database");}
 });}

Но здесь, похоже, используются старые переменные VA / B / C, поскольку они не отражают каких-либо изменений в базе данных.Я пробовал несколько других способов, таких как A = VA, за пределами {{}} трещин, но пока не нашел работающего.Как мне получить данные, которые функция python возвращает в javascript?

Спасибо

1 Ответ

0 голосов
/ 28 октября 2011

Если ваша функция loadFromDB определена в представлении testDB, то все, что находится внутри {{ }} в loadFromDB, будет заполнено во время создания исходной страницы при вызове testDB.Код шаблона web2py не выполняется с Javascript на стороне клиента - он используется для генерации исходного Javascript на стороне сервера (когда страница первоначально загружена).

Если вы хотите loadFromDbчтобы что-то сделать с данными, возвращаемыми вызовом Ajax, вам нужно написать логику в Javascript.Обратите внимание, что функция jQuery.ajax success принимает возвращенные данные в качестве первого аргумента, что-то вроде:

jQuery.ajax({
    [snip]
    success: function(data) {
        [JS code to do something with the returned data]
    },
    etc.
...