Страница загрузки jQuery через ajax и форма публикации внутри возвращенных данных ajax - PullRequest
0 голосов
/ 05 ноября 2010

Я пишу сценарий greasemonkey, чтобы сделать так, чтобы, когда пользователь нажимает флажок, страница с формой загружалась через .ajax, форма заполнялась автоматически и затем отправлялась.Форма - это multipart / form-data, которые, как я обнаружил, не могут быть опубликованы через вызовы .ajax.Чтобы обойти это, я сделал следующее:

function getConvoPage() {
    $.get("/page_with_form.php", { id: theId }, function(data){
        parsePage(data);
    } );
}

function parsePage(data) {
    var dataObject = jQuery(data);
    dataObject.find('textarea[name="message_text"]').val('Thank you for your purchase!');
    dataObject.find('form[enctype="multipart/form-data"]').submit();
}

Я могу установить значение текстовой области, и я подтвердил, что форма была найдена, но действие отправки ничего не делает.Я также попытался триггера () и имитации нажатия () на кнопку отправки.Ни один из них не работал, что заставляет меня верить, что это просто невозможно.

Что я могу сделать, чтобы сделать эту работу, или какой альтернативный подход будет работать?

1 Ответ

0 голосов
/ 05 ноября 2010

Вам нужно будет добавить форму на страницу, чтобы опубликовать ее.В простейшей форме это будет выглядеть так:

function parsePage(data) {
    var dataObject = jQuery(data);
    $('body').append( dataObject );

    dataObject.find('textarea[name="message_text"]').val('Thank you for your purchase!');
    dataObject.find('form[enctype="multipart/form-data"]').submit();
}

Если вы не хотите, чтобы форма перезагружала всю страницу, вы можете создать скрытый iframe, добавив iframe встраницы, затем добавьте свою форму в iframe.Наконец, отправьте вашу форму и дождитесь события iframe onload (которое может быть выполнено с помощью функции load() jquery .

. Последний подход может выглядеть примерно так:1010 *

var asyncSubmitForm = function( form, callback ) {

    var f=$(form).clone();

    // the form is expected to already have the appropriate `action` and `method`
    // attributes set.

    var iframe = $('<iframe id="tempFrame"></iframe>');
    iframe.hide().appendTo('body');
    iframe.load(function() {
        if( callback ) callback(iframe);
        iframe.remove();
        iframe = null;
    });

    iframe.contents().find('body').append(f);
    f.submit();
};

тогда ваша parsePage() функция будет выглядеть так:

function parsePage(data) {
    var dataObject = jQuery(data);

    dataObject.find('textarea[name="message_text"]').val('Thank you for your purchase!');
    asyncSubmitForm(dataObject.find('form[enctype="multipart/form-data"]'), function(iframe) {
       alert('form submitted. response ['+$(iframe).contents().html()+']');
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...