render: nothing => true не работает в мобильном приложении jquery Rails 3.0 - PullRequest
1 голос
/ 02 марта 2012

Каждый раз, когда кто-то меняет свой ответ в переключателе, он записывается в базу данных.Вот javascript в файле application.js:

$('.submittable').live('change', function() {
    $(this).parents('form:first').submit();
    return false;
});

В переключателе HTML:

class="submittable"

На полном сайте нет изменений на странице, потому что она подавленав контроллере, например, так:

def update_result
   ...
   render :nothing => true
end

Однако в мобильной версии страница переходит на страницу с текстом undefined в левом верхнем углу, но в противном случае она пуста.В окне терминала появляется сообщение:

...
Processing by AnswersController#update_result as JS
...
Rendered text template (0.0ms)
Completed 200 OK in 309ms (Views: 5.6ms | ActiveRecord: 5.1ms)

Спасибо за помощь.

1 Ответ

1 голос
/ 02 марта 2012

При использовании jQuery Mobile, чтобы отправить форму самостоятельно (чтобы не происходило изменение страницы), мы должны установить data-ajax="false" для тега <form> и затем настроить нашу собственную функцию AJAX (в обратном вызове submitдля формы):

//as of jQuery 1.7 `.live()` is depreciated in favor of `.delegate()`
$(document).delegate('.submittable', 'change', function() {

    //`.closest('form')` is the same as `.parent('form:first')`, also `.submit()` is shorthand for `.trigger('submit')`, just FYI
    $(this).closest('form').trigger('submit');
    return false;
}).delegate('form', 'submit', function () {

    //cache the jQuery object of this form and use that variable to setup the AJAX request
    var $form = $(this);
    $.ajax({
        url     : $form.attr('action'),//use the form's action attribute for the URL of the request
        type    : $form.attr('method'),//use the form's method attribute to set the TYPE of the request
        data    : $form.serialize(),//add the form input data to the request
        success : function (serverResponse) {
            //the server has responded, whatever was output by the server-side script is available through the `serverResponse` variable
        },
        error   : function (jqXHR, textStatus, errorThrown) {
            //make sure to handle errors
        }
    });

    return false;
});

<form action="..." data-ajax="false" method="post">
    ...
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...