web2py SQLFORM принимает слишком быстро

У меня есть web2py SQLFORM, который генерируется и возвращается вызовом AJAX, и форма помещается в определенный мной DIV. Я хочу, чтобы SQLFORM была формой обновления, а не формой вставки. Проблема в том, что форма сразу запускает функцию accept после записи в этот DIV. Этого не происходит, если форма для вставки, только обновление. Первоначальное принятие не проходит, и нажатие кнопки подтверждения не позволяет вторую принять. Я не знаю, почему не удается принять или почему это происходит немедленно.

вот функция JavaScript, которая делает вызов AJAX

function displayForm(currID){
    //Remove everything from the DIV we want to use
    $('#window').empty();
    //Call the ajax to bring down the form to update the series
    ajax('{{=URL('newForm')}}/'+currID,
    [], 'window');
}

А вот и контроллер newForm

def newSerForm():
record = db.myTable(request.args[0])
form = SQLFORM(db.myTable, record, fields=['series_name','image_thumbnail'])
if form.accepts(request.vars,session):
    print 'Series update successful!'
else:
    print 'Series update Failed...'
return form

displayForm вызывается нажатием кнопки, и после того, как вы это сделаете, форма принимает и терпит неудачу, и кнопка отправки снова не работает. Есть ли способ заставить SQLFORM сделать это? Странная вещь, если я изменю это, чтобы сделать вставки в myTable, это работает отлично. Он ведет себя именно так, как и должен. Но делать это таким образом не работает.

Хорошо, теперь это где-то странно. Я попытался достичь той же функциональности здесь с совершенно другим подходом, iFrame. Я сделал новые функции в моих контроллерах, которые создают форму на основе request.args[0]. выглядит так

def editEntry():
print request.args[0]
record = db.myTable(request.args[0])
form = SQLFORM(db.CC_user_submission, record, fields=['series_name', 'image_thumbnail']).process()
return dict(form=form)

А затем соответствующая HTML-страница, которая просто отображает форму. Что может быть проще, верно? Я иду на эту страницу по ссылке, которая дает правильный аргумент. Перейдите на страницу с формой для обновления. Обновление работает отлично. Отлично, теперь давайте поместим его в iFrame вместо ссылки на него. Я поместил это в iFrame на оригинальной странице. Откройте рамку. Не работает Я понятия не имею, что происходит, есть ли какая-то часть объяснения этому?

1 ответ

Используя метод iFrame, я действительно заставил его работать. Поскольку к iFrame требовалось добавить jQuery, для которого нужны кавычки, и URL-адрес iFrame, для которого также нужны кавычки, запись стала довольно запутанной, но это выполнимо. Выглядело так:

var myURL = "{{=URL('editEntry')}}/"+idArg.toString();
$('#window').append("<iframe src = " + myURL + "  width='450' height='400'> </iframe>");

Это не красиво, но это работает.

Другие вопросы по тегам