原型 js:ajax 提交时缺少输入类型文件
Prototype js : input type file is missing on ajax submit
我已经创建了一个不同的自定义表单并想使用原型提交表单 ajax.This 表单包含四个字段
two text field and
two file field.
但是当我使用原型 js 的 ajax 提交数据时,表单没有通过两个字段和 enctype="multipart/form-data" 但不起作用。
代码:
<form action="bt" method="post" enctype="multipart/form-data" name="new-art-upload" id="new-art-upload">
<input type="text" name="fname" value="" class="input-text required-entry"/>
<input type="text" name="fname" value="" class="input-text required-entry" />
<input type="file" name="fileone" class="required-entry" />
<input type="file" name="filetwo" class="required-entry" />
<button type="submit" title="<?php echo $this->__('Save The Art') ?>" class="button newAdd_Sub" onclick="newartUpload.submit(this)"><span><span><?php echo $this->__('Save Art') ?></button>
</form>
脚本:
<script>
var newartUpload=new VarienForm('new-art-upload');
newartUpload.submit=function(button,url){
if(this.validator.validate) {
var form=this.form;
var oldUrl = form.action;
if (url) {
form.action = url;
}
var e=null;
try{
// this.form.submit();
new Ajax.Request(this.form.action,{
method:this.form.method,
parameters:this.form.serialize(),
contentType: 'multipart/form-data',
onSuccess:function(transport){
var response=transport.responseText.evalJSON(true);
}.bind(this)
});
}catch(e){
}
if(e){
throw e;
}
}
}.bind(newartUpload)
</script>
我猜它可能是内容类型,而且主要是表单中的内容类型/
主要问题是文件输入字段未发送到 ajax 请求
您不能通过 Ajax 使用 Prototype 提交文件,因为 XMLHttpRequest(Ajax 的基础)不适用于多部分表单。有变通方法,例如使用 keyhole iframe 发送普通表单请求,并通过 iframe 使用回调重定向或响应外部页面以显示表单已完成。现代 JS 中的新文件接口(在 Prototype Ajax 接口编写后标准化多年)现在可以通过 JS 提交发送文件数据,但这被积极劝阻(并且只有在极少数情况下才有可能)浏览器,不久前)所以 Prototype 只是从它将序列化的表单元素列表中删除文件输入。
我已经创建了一个不同的自定义表单并想使用原型提交表单 ajax.This 表单包含四个字段
two text field and
two file field.
但是当我使用原型 js 的 ajax 提交数据时,表单没有通过两个字段和 enctype="multipart/form-data" 但不起作用。 代码:
<form action="bt" method="post" enctype="multipart/form-data" name="new-art-upload" id="new-art-upload">
<input type="text" name="fname" value="" class="input-text required-entry"/>
<input type="text" name="fname" value="" class="input-text required-entry" />
<input type="file" name="fileone" class="required-entry" />
<input type="file" name="filetwo" class="required-entry" />
<button type="submit" title="<?php echo $this->__('Save The Art') ?>" class="button newAdd_Sub" onclick="newartUpload.submit(this)"><span><span><?php echo $this->__('Save Art') ?></button>
</form>
脚本:
<script>
var newartUpload=new VarienForm('new-art-upload');
newartUpload.submit=function(button,url){
if(this.validator.validate) {
var form=this.form;
var oldUrl = form.action;
if (url) {
form.action = url;
}
var e=null;
try{
// this.form.submit();
new Ajax.Request(this.form.action,{
method:this.form.method,
parameters:this.form.serialize(),
contentType: 'multipart/form-data',
onSuccess:function(transport){
var response=transport.responseText.evalJSON(true);
}.bind(this)
});
}catch(e){
}
if(e){
throw e;
}
}
}.bind(newartUpload)
</script>
我猜它可能是内容类型,而且主要是表单中的内容类型/
主要问题是文件输入字段未发送到 ajax 请求
您不能通过 Ajax 使用 Prototype 提交文件,因为 XMLHttpRequest(Ajax 的基础)不适用于多部分表单。有变通方法,例如使用 keyhole iframe 发送普通表单请求,并通过 iframe 使用回调重定向或响应外部页面以显示表单已完成。现代 JS 中的新文件接口(在 Prototype Ajax 接口编写后标准化多年)现在可以通过 JS 提交发送文件数据,但这被积极劝阻(并且只有在极少数情况下才有可能)浏览器,不久前)所以 Prototype 只是从它将序列化的表单元素列表中删除文件输入。