我可以使用以下jQuery代码使用Ajax请求的post方法执行文件上载吗?
$.ajax({
type: "POST",
timeout: 50000,
url: url,
data: dataString,
success: function (data) {
alert('success');
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
如果可能,我是否需要填写"数据"部分?这是正确的方法吗?我只将文件发布到服务器端.
我一直在谷歌搜索,但我发现是一个插件,而在我的计划中,我不想使用它.至少目前.
我使用jQuery的ajax函数将文件发送到服务器端PHP脚本时遇到问题.可以获取文件列表$('#fileinput').attr('files')但是如何将此数据发送到服务器?使用文件输入时$_POST,服务器端php脚本上的结果array()为0(NULL).
我知道这是可能的(虽然我到目前为止还没有找到任何jQuery解决方案,只有Prototye代码(http://webreflection.blogspot.com/2009/03/safari-4-multiple-upload-with-progress.html) ).
这似乎是相对较新的,所以请不要通过XHR/Ajax提及文件上传,因为它肯定有用.
我需要Safari 5中的功能,FF和Chrome会很好但不是必需的.
我现在的代码是:
$.ajax({
url: 'php/upload.php',
data: $('#file').attr('files'),
cache: false,
contentType: 'multipart/form-data',
processData: false,
type: 'POST',
success: function(data){
alert(data);
}
});
Run Code Online (Sandbox Code Playgroud) 的XMLHttpRequest的2级标准(还是工作草案)定义FormData的接口.此接口允许将File对象附加到XHR请求(Ajax请求).
顺便说一句,这是一个新功能 - 在过去,使用了"隐藏iframe技巧"(在我的另一个问题中阅读).
这就是它的工作原理(例子):
var xhr = new XMLHttpRequest(),
fd = new FormData();
fd.append( 'file', input.files[0] );
xhr.open( 'POST', 'http://example.com/script.php', true );
xhr.onreadystatechange = handler;
xhr.send( fd );
Run Code Online (Sandbox Code Playgroud)
where input是一个<input type="file">字段,handler是Ajax请求的成功处理程序.
这在所有浏览器中都很漂亮(除了IE之外).
现在,我想使这个功能与jQuery一起使用.我试过这个:
var fd = new FormData();
fd.append( 'file', input.files[0] );
$.post( 'http://example.com/script.php', fd, handler );
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用(抛出"非法调用"错误 - 截图在这里).我假设jQuery需要一个表示form-field-names/values的简单键值对象,而FormData我传入的实例显然是不兼容的.
现在,由于可以将FormData实例传入xhr.send(),我希望它也可以使它与jQuery一起使用.
更新:
我在jQuery的Bug Tracker上创建了一个"功能票".它在这里:http://bugs.jquery.com/ticket/9995
我被建议使用"Ajax prefilter"...... …
我正在尝试在我的项目中实现AJAX文件上传功能.我正在使用jQuery; 我的代码使用AJAX提交数据.我还想实现一个文件上传进度条.我怎样才能做到这一点?有没有办法计算已经上传了多少,以便我可以计算上传的百分比并创建一个进度条?
我想在我的Intranet页面上实现一个简单的文件上传,尽可能小的设置.
这是我的HTML部分:
<input id="sortpicture" type="file" name="sortpic" />
<button id="upload">Upload</button>
Run Code Online (Sandbox Code Playgroud)
这是我的JS jquery脚本:
$("#upload").on("click", function() {
var file_data = $("#sortpicture").prop("files")[0];
var form_data = new FormData();
form_data.append("file", file_data);
alert(form_data);
$.ajax({
url: "/uploads",
dataType: 'script',
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function(){
alert("works");
}
});
});
Run Code Online (Sandbox Code Playgroud)
在网站的根目录中有一个名为"uploads"的文件夹,具有"users"和"IIS_users"的更改权限.
当我选择具有文件格式的文件并按下上传按钮时,第一个警报返回"[object FormData]".第二个警报没有被调用,"uploads"文件夹也是空的!?
有人可以帮助我找出错误吗?
下一步应该是,用服务器端生成的名称重命名文件.也许有人可以给我一个解决方案.
我在这个结构中有一个blob数据:
Blob {type: "audio/wav", size: 655404, slice: function}
size: 655404
type: "audio/wav"
__proto__: Blob
Run Code Online (Sandbox Code Playgroud)
它实际上是使用最近的Chrome getUerMedia()和Recorder.js记录的声音数据
如何使用jquery的post方法将此blob上传到服务器?我没试过就试过这个:
$.post('http://localhost/upload.php', { fname: "test.wav", data: soundBlob },
function(responseText) {
console.log(responseText);
});
Run Code Online (Sandbox Code Playgroud) 在普通的javascript中非常简单:只需将回调附加到 {XMLHTTPRequest}.onprogress
var xhr = new XMLHttpRequest();
xhr.onprogress = function(e){
if (e.lengthComputable)
var percent = (e.loaded / e.total) * 100;
};
xhr.open('GET', 'http://www...', true);
xhr.onreadystatechange = function() {
...
};
xhr.send(null);
Run Code Online (Sandbox Code Playgroud)
但我正在做一个用JQuery($.get()或$.ajax())下载html数据的ajax网站,我想知道哪个是获取请求进度的最佳方式,以便用一点进度条显示它,但奇怪的是,我不是在JQuery文档中找到任何有用的东西......
不可否认,Stack Overflow上存在类似的问题,但似乎没有完全符合我的要求.
以下是我要做的事情:
直到这里,一切都很好.数据在我需要时进入我的数据库.但我也想通过AJAX帖子提交我的表格:
.ajax()jQuery方法接口我想我可以想象如何通过使用纯javascript在字段的值更改时自动上传文件来实现此目的,但我宁愿一下子在jQuery中提交所有内容.我认为通过查询字符串是不可能的,因为我需要传递整个文件对象,但我现在有点迷失在这一点上做什么.
这可以实现吗?
所以我有一个表单,我使用jquery序列化函数通过ajax提交表单
serialized = $(Forms).serialize();
$.ajax({
type : "POST",
cache : false,
url : "blah",
data : serialized,
success: function(data) {
}
Run Code Online (Sandbox Code Playgroud)
但是如果表单有一个<input type="file">字段怎么办....如何使用这个ajax序列化方法将文件传递给表单...打印$ _FILES不输出任何内容
好像我没有清楚地传达我的问题.我需要发送一个文件(使用AJAX),我需要使用Nginx HttpUploadProgressModule获取文件的上传进度.我需要一个很好的解决方案.我尝试过使用jquery.uploadprogress插件,但我发现自己不得不重写它以使其在所有浏览器中工作并使用AJAX发送文件.
我只需要执行此操作的代码,它需要在所有主流浏览器(Chrome,Safari,FireFox和IE)中运行.如果我能得到一个可以处理多个文件上传的解决方案,那就更好了.
我正在使用jquery.uploadprogress插件从NginxHttpUploadProgressModule获取文件的上传进度.这是一个facebook应用程序的iframe内部.它适用于Firefox,但它在chrome/safari中失败了.
当我打开控制台时,我得到了这个.
Uncaught ReferenceError: progressFrame is not defined
jquery.uploadprogress.js:80
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?
我想在完成后使用AJAX发送文件.我该如何实现?
编辑:
我很快就需要这个,这很重要,所以我要在这个问题上给予100点奖励.第一个回答它的人将得到100分.
编辑2:
Jake33帮我解决了第一个问题.第一个给出如何使用ajax发送文件的响应的人将获得100分.
jquery ×10
ajax ×8
file-upload ×6
javascript ×6
html5 ×3
php ×2
form-data ×1
nginx ×1
post ×1
progress-bar ×1
upload ×1