JQuery Mobile и JSON опубликовать ответы - PullRequest
1 голос
/ 14 ноября 2011

Как лучше всего обрабатывать пост в форме, возвращающий ответ json?Мы пытаемся повторно использовать некоторый код в мобильной версии нашего сайта, который возвращает JSON, и я не уверен, что лучше всего справиться с JavaScript.Я хочу заполнить диалог.Действительно ли мне нужно установить для data-ajax значение false в теге формы и вместо этого вызвать $ .post?

Спасибо, Роб

Ответы [ 3 ]

7 голосов
/ 15 ноября 2011

Да, чтобы обработать отправку формы в jQuery Mobile, вам нужно добавить data-ajax="false" к тегу формы, чтобы инфраструктура jQuery Mobile не справилась с этим за вас.Затем вы можете настроить свой собственный обработчик для события submit:

//add event handler to your form's submit event
$('form').on('submit', function (e) {
    var $this = $(this);

    //prevent the form from submitting normally
    e.preventDefault();

    //show the default loading message while the $.post request is sent
    $.mobile.showPageLoadingMsg();

    //send $.post request to server, `$this.serialize()` adds the form data to the request
    $.post($this.attr('action'), $this.serialize(), function (response) {

        //you can now access the response from the server via the `response` variable
        $.mobile.hidePageLoadingMsg();
    }, 'json');//you can set the response data-type as well
});

Вот документация для $.post(): http://api.jquery.com/jquery.post/

Примечание: .on() используется на местеамортизируемой .bind() функции: http://api.jquery.com/on/

1 голос
/ 16 февраля 2012

Возможно, вы захотите добавить обработчик .error () в пример Jasper, в противном случае, если в jquery или на стороне сервера будет ошибка, ваше загрузочное сообщение будет отображаться сверху, пока пользователь не обновит страницу, что, вероятно, вызовет многоиз данных, которые он ввел.

//add event handler to your form's submit event
$('form').on('submit', function (e) {
    var $this = $(this);

    //prevent the form from submitting normally
    e.preventDefault();

   //show the default loading message while the $.post request is sent
    $.mobile.showPageLoadingMsg();

    //send $.post request to server, `$this.serialize()` adds the form data to the request
    $.post($this.attr('action'), $this.serialize(), function (response) {

        //you can now access the response from the server via the `response` variable
        $.mobile.hidePageLoadingMsg();
    }, 'json') //you can set the response data-type as well
    .error(function(e) {
        $.mobile.showPageLoadingMsg();
        console.log('my_function_name, ' + e.responseText); 
    });
});
0 голосов
/ 14 ноября 2011

Поможет ли вам этот пост?

http://www.giantflyingsaucer.com/blog/?p=2574

Может быть, вы можете объяснить немного больше, что вы имеете в виду, говоря "Мне действительно нужно установить data-ajax на falseна форме тега "?Если вы хотите сохранить способ AJAX, я думаю, что вы должны обрабатывать форму POST, например, с помощью $ .post или $ .ajax (см. Пример)

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