我正在尝试使用jQuery的$.ajax
函数上传文件,但没有得到任何输出。
有人请帮我解决这个问题。
我不知道这个脚本是否正确。
我的剧本是:
$.ajax({
url:'newsup.php',
data: "",
type: 'POST',
contentType:'multipart/form-data',
dataType: 'json',
catche: 'false',
success:function(data6)
{
$("#disp").removeClass().addClass((data6.error=== false)? 'success':'error').html(data6.msg).fadeIn('fast');
//dele();
if($("#disp").hasClass('success'))
{
alert("success");
setTimeout("$('#disp').fadeOut('slow')",3000);
}
},
error:function(XMLHttpRequest,textStatus,errorThrown)
{
$("#disp").removeClass().addClass('error').html("There was an <strong>"+errorThrown+"</strong> error due to <strong>"+textStatus+" condition").fadeIn('fast');
}
});
我还需要帮助使用jQuery从文件上传字段中获取数据。
答案 0 :(得分:6)
请使用插件。
在我看来这个插件是更好的解决方案。你不需要记住所有选项等。只需将'ajax'替换为'ajaxForm'。
答案 1 :(得分:2)
AJAX不支持文件上传。像ajaxfileupload这样的插件基本上会创建一个隐藏的表单并动态上传您的文件。
看看here并阅读Oli的回答
答案 2 :(得分:2)
我就是这样做的。使用FormData对象。
注意:for语句的奇怪语法只是设置&#34; f&#34;到array [i]实例。
$("#submit").click(function () {
var formData = new FormData();
for (var i = 0, f; f = fileArray[i]; i++) {
formData.append("opmlFile", f);
}
$.ajax({
url: "/Documents/SaveFiles/" + @Model,
type: "POST",
data: formData,
cache: false,
contentType: false,
processData: false
})
.error(function (xhr, status, error) {
$.notify(error, true);
})
.success(function (data, status, xhr) {
$.notify("Success");
});
});
不幸的是,我不记得我从中得到了哪篇文章,但它是Stack Overflow上的其他人。
答案 3 :(得分:1)
答案 4 :(得分:1)
Ajax支持使用FormData Object上传文件,除了IE8 / 9外,还支持所有主流浏览器 见下文
答案 5 :(得分:1)
我使用它并且工作正常:
$('#btnUploadFile').on('click', function () {
var data = new FormData();
var files = $("#fileUpload").get(0).files;
// Add the uploaded file content to the form data collection
if (files.length > 0) {
data.append("upload", files[0]);
}
// Make Ajax request with the contentType = false, and procesDate = false
var ajaxRequest = $.ajax({
type: "POST",
url: "/api/documents",
contentType: false,
processData: false,
data: data,
error: function (xhr, status, error) {
console.log(xhr);
console.log(status);
console.log(error);
console.log(data);
}
});
ajaxRequest.done(function (xhr, textStatus) {
$("#response").attr('class', "alert alert-success");
$("#response").html("File uploaded successfully");
});
});
答案 6 :(得分:0)
只需在表单上使用提交事件即可发送文件并阻止默认表单操作
$('#form').submit(function(e) { return false; });
并通过
获取服务器端的文件$_FILES['inputName'];
答案 7 :(得分:0)
另一种选择是对文件内容进行base64编码,然后将其作为字符串发送,并在后端对其进行解码。