我正在尝试在另一个表单中提交表单,因为我需要第二个表单中的第一个表单结果。我尝试在其他一些线程中使用表单序列化。这里的问题是,我没有收到错误但它也不起作用。
<script type="text/javascript">
$(document).ready(function(){
$("[id='video-submit']").click(function() {
$.ajax({
type: "POST",
data: $("#VideoForm").serialize(),
url: "cp.asp?Process=UploadVideo",
success: function(output) {
$("#output").html(output);
},
error: function(output) {
$("#output").html(output);
}
}); //close $.ajax(
});
});
</script>
<div id="form">
<form method="post" action="?Section=controlpanel&Process=AddVideo">
<fieldset>
<div class="required" id="VideoForm">
<label for="VideoURL">Video File</label>
<input type="file" size="23" name="VideoFile">
<input type="button" name="Submit" id="video-submit" value="Upload" />
</div>
<div id="output">
</div>
</fieldset>
<fieldset>
<div class="required">
<label for="VideoName">Video Name</label>
<input type="text" name="VideoName" id="form-text<%=VideoNAME_ERR%>" />
</div>
<div class="required">
<label for="VideoDuration">Video Duration</label>
<input type="text" name="VideoDuration" id="form-text<%=VIDEODURATION_ERR%>"/>
</div>
<div class="required">
<label for="VideoShortDesc">Video Short Desc</label>
<textarea rows="5" cols="30" name="VideoShortDesc" id="form-text<%=VideoSHORTDESC_ERR%>" ></textarea>
</div>
<div class="required">
<label for="Publish?">Publish?</label>
<select size="1" name="Active" id="form-text">
<option value="1">Yes</option>
<option value="0">No</option>
</select>
</div>
</fieldset>
<fieldset>
<input type="submit" name="Submit" id="form-submit" value="Submit" />
</fieldset>
</form>
</div>
cp.asp?Process = UploadVideo :::
Case "UploadVideo"
Path = "/media/videos"
Set Upload = Server.CreateObject("Persits.Upload" )
Upload.IgnoreNoPost = True
Upload.OverwriteFiles = False
Upload.SetMaxSize 104850 ' Truncate files above 10MB
Upload.SaveVirtual(Path)
For Each File in Upload.Files
If File.ImageType = "UNKNOWN" Then
Response.Write "You cannot upload an unknown format."
File.Delete
Response.End
Else
Response.Write "Video successfully attached!"
Response.Write "<input type=""hidden"" name=""VideoURL"" value=""/media/videos/" & Server.HTMLEncode(File.OriginalPath) &""" />"
End If
Next
答案 0 :(得分:2)
那就是不行。虽然JQuery可以序列化表单字段并使用AJAX将它们发布到服务器,但它无法对文件字段执行此操作。
您要将文件发布到服务器的唯一方法是使用普通的表单帖子,您真的应该使用多部分编码。
答案 1 :(得分:0)
不要在div上使用$().serialize()
,而是尝试调用$.param()
并传递一个表单元素数组。像这样:
$.param($('input[type!="button"][type!="submit"], textarea, select', '#VideoForm'))
然后你可以将这样的事件处理程序附加到上传按钮:
uploadFile = function(event)
{
params = $.param($('input[type!="button"][type!="submit"]', '#VideoForm'));
// do something to submit your request using ajax
// prevent the button from causing a form submit
event.preventDefault();
}
编辑:嗯。看看其他答案,我不知道我错过了第一个请求应该上传文件。这对于其他应用程序来说非常有用,在这些应用程序中,表单正在对带有参数的表单进行简单的部分发布。
答案 2 :(得分:0)
您的问题略有不同,但如果问题是序列化嵌套表单(在Chrome中支持,但Firefox不支持 - 因为HTML无效),您可以使用解决方法:
$('#yourFormId, #yourFormId form').serialize();
选择表格和子表格,然后序列化整个集合。