使用pjax(和jQuery.form?)发布带有文件附件的表单

我成功地将pjax用于链接和表单(GET以及POST).但是现在我有一个表格,它还必须发送一个< input type =“file”...>.由于pjax不支持这一点,我查看了 https://github.com/malsup/form(jquery.form插件),它支持使用文件提交表单数据,但不支持使用浏览器历史记录对象的“pjax”方式.

那么,如何在包含文件字段的表单中使用pjax功能呢?有任何想法吗?

编辑:我之所以不简单地使用FormData对象,而是使用jquery.form插件:Internet Explorer无法处理它们.该插件为此浏览器提供了一种解决方法.我不坚持使用jquery.form插件,但我需要一种方法使它适用于所有主流浏览器.

解决方法

看起来您可能需要在AJAX / pJAX请求中使用FormData对象来处理文件.您可以在 Mozilla Developer Network上阅读更多内容.

例如,如果这是您的表单:

<form enctype="multipart/form-data">
<input name="file" type="file" />
<input type="button" value="Upload" />
</form>

首先得到文件内容如下:

var formData = new FormData($('form')[0]);

然后你可以使用jQuery $.ajax请求或简单的XMLHttpRequest();像这样:

var xhr = new XMLHttpRequest();
xhr.open("POST","http://foo.com/processfile.PHP");
xhr.send(formData);

或者在jQuery中类似:

$.ajax({
    url: 'http://foo.com/processfile.PHP',type: 'POST',data: formData,cache: false,contentType: false,processData: false
});

在服务器端,在processfile.PHP中,您可以使用以下方式接收/显示文件内容

$file = $_FILES [‘file’] [‘name’];

这应该与pJAX一起使用,因为它是异步的!只需确保在pJAX请求之前发出此请求,或者如果您使用的是jQuery,则可以将其添加为成功回调的一部分.例如(不知道您使用的是哪个pJAX库):

$.ajax({
    url: 'http://foo.com/processfile.PHP',processData: false,success: function(data) {
       $.pjax({url: url,container: '#pjax-container'});
    }
});

编辑:如果你想支持IE7,你需要回退使用隐藏的iframe元素进行上传,因为FormData仅在Internet Explorer 10中受支持.一个伟大的插件,用于提交我已经测试过但没有jQuery工作的文件http://fineuploader.com/在我看来比https://github.com/malsup/form(jquery.form插件)更好/更容易使用.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


jQuery表单验证提交:前台验证一(图文+视频)
jQuery表单验证提交:前台验证二(图文+视频)
jQuery如何实时监听获取input输入框的值
JQuery怎么判断元素是否存在
jQuery如何实现定时重定向
jquery如何获取复选框选中的值
jQuery如何清空form表单数据
jQuery怎么删除元素节点
JQuery怎么循环输出数组元素
jquery怎么实现点击刷新当前页面
怎么用jquery实现文字左右展开收缩效果
jquery怎么删除html属性
如何用jquery实现图片翻转效果
jquery怎么删除样式属性
jquery如何获取当前元素的位置
如何用jquery实现点击展开收缩效果
jquery怎么实现点击隐藏显示效果
jQuery如何获取当前页面url
jQuery怎么获取鼠标的位置坐标
简洁易懂的jQuery:HTML表单与jQuery