我正在使用jQuery和Ajax为我的表单提交数据和文件,但我不确定如何以一种形式发送数据和文件?
我目前对这两种方法的做法几乎相同,但数据收集到数组的方式不同,数据使用.serialize();但文件使用= new FormData($(this)[0]);
是否可以将两种方法结合起来,以便能够通过Ajax以一种形式上传文件和数据?
数据jQuery,Ajax和html
$("form#data").submit(function(){
var formData = $(this).serialize();
$.ajax({
url: window.location.pathname,
type: 'POST',
data: formData,
async: false,
success: function (data) {
alert(data)
},
cache: false,
contentType: false,
processData: false
});
return false;
});
<form id="data" method="post">
<input type="text" name="first" value="Bob" />
<input type="text" name="middle" value="James" />
<input type="text" name="last" value="Smith" />
<button>Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)
文件jQuery,Ajax和html
$("form#files").submit(function(){
var formData = new FormData($(this)[0]);
$.ajax({
url: window.location.pathname,
type: 'POST',
data: formData,
async: false,
success: function (data) {
alert(data) …Run Code Online (Sandbox Code Playgroud) 我有通过电话提交给django服务器的表格.
$("#my_form").submit();
Run Code Online (Sandbox Code Playgroud)
它通过执行以下代码返回xml文件:
content = some_data_retrieved_from_database_as_xml()
response = HttpResponse(content, content_type='text/xml')
response['Content-Disposition'] = 'attachment; '
response['Content-Disposition'] += 'filename=my_file.xml'
response['Content-Encoding'] = 'UTF-8'
return response
Run Code Online (Sandbox Code Playgroud)
谷歌浏览器只下载此文件,但我想注册额外的回调函数,称为myFunction(数据).
Chrome应下载此文件,然后调用myFunction(此xml文件).
我试过这段代码,但它不起作用:
$("#my_form").bind('ajax:complete', myFunction);
Run Code Online (Sandbox Code Playgroud)
我也尝试使用$ .post,但之后只调用了回调函数,不幸的是我的文件没有被下载.
我有一个父窗口,我在其中使用 window.open() 打开弹出窗口,并且我正在使用 window.opener 方法监视该弹出窗口的返回。我在这里有两个疑问:
代码:
// parent window handling of information returned from the pop-up window
function HandlePopupResult(value) {
alert("The field value is: " + value);
$("input[value='Search']").trigger("click");
}
//pop-up window handling of information to be returned to the parent window on submission
$("#myForm").submit(function() {
window.opener.HandlePopupResult($("#field").val());
window.close();
});
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:如何确保提交已完成,以便我在父窗口中触发搜索点击并关闭此弹出窗口?请让我知道。
我终于能够正确地将信息发送回我的父表单,但我只需要确保我的提交完成。关于确保仅在提交成功后触发我的事件的任何建议?
干杯。
我陷入了一个非常奇怪的情况。解释起来很复杂,但我会尽力而为。
问题的详细说明:
在导航的每个顶部单击(绿色甜甜圈/圆圈)或下一步按钮,如果存在并且有效,则必须提交该表单。如果无效,form.valid()会触发验证错误,返回false将停止任何进一步的传播。在我发现一个奇怪的行为(不是很持久)之前,此设置可以正常工作。具体来说,我第3个标签上的表格数据量很大。当我点击下一步按钮时,它实际上应该经过相同的过程:检查现有表格(如果有效),然后提交。Submit会调用POST操作方法,发布完成后将获取下一个选项卡的视图。它像这样运行5/10次,但有时GET在POST之前执行,这会导致下一页加载不完整的数据。当我放置断点进行调试时,我看到下一个选项卡的GET在当前选项卡的POST之前执行。
用户界面说明:
我有一个UI,<a>顶部有4个导航按钮-中心始终有一个表单-底部有上一个和下一个按钮。
使用MVC在MVC中构造表单 Ajax.BeginForm
对于<a>顶部的每个Nav链接元素,我都有一个JavaScript函数
var LoadTabs = function (e, arg) {
// This is to validate a form if one of the top links is clicked and form has incomplete fields...
if (arg !== "prev" && arg !== "next") {
if (!window.ValidateForm(false)) return false;
}
var url = $(this).attr('data'); // this contains link to a GET action method
if (typeof url != "undefined") {
$.ajax(url, { context: { param: arg } }).done(function …Run Code Online (Sandbox Code Playgroud) javascript ×4
jquery ×4
ajax ×1
asp.net-mvc ×1
c# ×1
django ×1
download ×1
file ×1
form-submit ×1
forms ×1
window.open ×1