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