2010-11-05 101 views
0

我正在寫一個greasemonkey腳本,以便當用戶單擊複選框時,帶有表單的頁面通過.ajax加載,表單填充自動發佈然後發佈。表單是從我找到的multipart/form-data,不能通過.ajax調用發佈。爲了解決這個問題,我做了以下內容:jQuery加載頁面通過ajax和後窗體裏面的返回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(); 
} 

我能夠設置textarea的價值,我已確認的形式被發現,但提交操作不執行任何操作。我也嘗試了trigger()並模擬點擊()到提交按鈕。這些都不起作用,這使我相信這是不可能的。

我能做些什麼來完成這項工作或者什麼是可行的替代方法?

回答

0

你需要的形式添加到頁面中,以張貼。在最簡單的形式,那將是這樣的:

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事件(可以用jQuery的load() event function完成

後一種方法可能是這個樣子:

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()+']'); 
    }); 
}