我不知道为什么我不能让jQuery传递上传数据,因为AJAX对象似乎配置正确,并且正在发送正确的Content-Type/MIME-Type标头.
我尝试了两种不同形式的请求 - 一种是在文字中包含FormData对象,另一种是直接传递FormData对象.
不幸的是,无论哪种方式我都无法通过,$ _FILES和$ _POST都是空数组.
我想要使用的理想要求如下:

以下代码:
var files = new FormData();
$.each(context.prototype.fileData, function(i, obj) { files.append(i, obj.value.files[0]); });
var request = { action: 'upload', id: response.obj.id, data: files };
$.ajax({
type : 'POST',
url : context.controller,
data : request,
processData : false,
contentType : 'multipart/form-data',
mimeType : 'multipart/form-data',
success : function(r) {
console.log(r);
//if (errors != null) { } else context.close();
},
error : function(r) { alert('jQuery Error'); }
});
Run Code Online (Sandbox Code Playgroud)
当我尝试导出$ _FILES和$ _POST时,唯一的响应(查看网络选项卡和控制台)只是两个空数组......
我正在创建一个JSP/Servlet Web应用程序,我想通过Ajax将文件上传到Servlet.我该怎么做呢?我正在使用jQuery.
我做到目前为止:
<form class="upload-box">
<input type="file" id="file" name="file1" />
<span id="upload-error" class="error" />
<input type="submit" id="upload-button" value="upload" />
</form>
Run Code Online (Sandbox Code Playgroud)
有了这个jQuery:
$(document).on("#upload-button", "click", function() {
$.ajax({
type: "POST",
url: "/Upload",
async: true,
data: $(".upload-box").serialize(),
contentType: "multipart/form-data",
processData: false,
success: function(msg) {
alert("File has been uploaded successfully");
},
error:function(msg) {
$("#upload-error").html("Couldn't upload file");
}
});
});
Run Code Online (Sandbox Code Playgroud)
但是,它似乎不发送文件内容.
我试图发送一些表单而不重新加载页面,我试图理解引擎盖下的细节,因此不使用任何JavaScript库:
var http = createRequestObject();
function createRequestObject() {
var objAjax;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
objAjax=new XMLHttpRequest();
}
else
{// code for IE6, IE5
objAjax=new ActiveXObject("Microsoft.XMLHTTP");
}
return objAjax;
}
function display_progress() { ... }
function upload_file() {
var request = 'UploaderServlet';
http.open('post', request);
http.onreadystatechange = display_progress;
http.send(null); // HERE PROBABLY THE DATA SHOULD BE SENT
}
<form enctype="multipart/form-data" id="upload_form" name="upload_form" method="POST" action="UploaderServlet" onsubmit="upload_file(); return false;" target="upload_target">
Choose a file <br />
<input name="file" size="27" …Run Code Online (Sandbox Code Playgroud) Laravel观点:
<form enctype="multipart/form-data" method="post" name="imagesform" id="imagesform" >
<input type="hidden" name="_token" value="{{ csrf_token()}}">
<div>
<label id="show" for="files" class="button">Upload photo</label>
<input id="files" name="images" style="visibility:hidden;" type="file">
</div>
<button type="submit" class="save" id="saveImage" style="border-radius: 8px; padding: 5px 15px;">SAVE</button>
</form>
Run Code Online (Sandbox Code Playgroud)
这是我上传图像的代码(它发生在我的引导程序模型中).当我上传图像并单击提交按钮时,图像应该插入到数据库中,并且应该检索并显示在视图页面上.
Ajax代码:
$("#saveImage").click(function(e){
// var formdata=new FormData($("#imagesform")[0]);
//alert(formdata);
$.ajaxSetup({
headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') }
});
$.ajax({
url: 'saveImages/{{$dataId}}',
type: 'POST',
data:new FormData($("#imagesform")),
success: function (data) {
alert(data)
},
cache: false,
processData: false
});
return false;
});
Run Code Online (Sandbox Code Playgroud)
这是ajax代码,我试过了.但是formdata的警告显示[object FormData]和浏览器控制台显示Method not allowed exception
Laravel路线:
Route::post('saveImages/{dataId}',['as' …Run Code Online (Sandbox Code Playgroud) 如何使用AJAX使用enctype ="multipart/form-data"提交表单?
我正在使用AngularJS与RESTful Web服务进行交互,使用Restangular来抽象暴露的各种实体.这些实体中的一些是图像或文件,因此我需要能够使用Restangular的post动作在同一请求中发送二进制数据和文本字段.
如何使用Restangular将上传的图像或文件的数据发送到单个POST请求中的宁静Web服务?
我试图找出如何在同一XMLHttpRequest中发送文件和参数.这可能吗?
显然我可以做xhr.send(file + params)或xhr.(file,params).而且我认为我不能设置两个不同的请求标头来执行此操作...
xhr.setRequestHead('X_FILENAME', file.name)
xhr.send(file);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(params);
Run Code Online (Sandbox Code Playgroud)
有没有办法发送params而不必使用GET或次要xhr请求?
我正在尝试使用jQuery提交服务器端处理的完整表单.表单包含各种字段,包括文件上载选项.我正在尝试使用FormData来执行此操作,因为我不关心目前不支持它的浏览器.
我有以下(简化的)jQuery代码:
$("#create_event_form").submit(function(event) {
event.preventDefault();
var formData = new FormData($(this));
$.post(
"create_entity.php",
{ formData: formData },
function(data) {
var response = jQuery.parseJSON(data);
if(response.code == "success") {
alert("Success!");
} else if(response.code == "failure") {
alert(response.err);
}
}
);
});
Run Code Online (Sandbox Code Playgroud)
我的服务器端如下所示:
<?php
require_once('includes/database.php');
$dbh = db_connect();
$response = array();
if($_SERVER['REQUEST_METHOD'] == "POST") {
// do some other stuff...
// upload entity picture and update database
$url = $_FILES['entity_pic']['name'];
if($url != "") {
if($type == "user") {
$pic_loc = "images/profiles/";
} else if($type …Run Code Online (Sandbox Code Playgroud) 有一个form。它具有用于上传的字段file。我submit将此表格发送给ajax请求,post方法的服务器。
var frm = $('#contact_form');
frm.submit(function (e) {
e.preventDefault();
var data = new FormData()
data.append('file', $('#id_file')[0].files[0]);
$.ajax({
beforeSend: function(jqXHR, settings) {
jqXHR.setRequestHeader('X-CSRFToken', $('input[name=csrfmiddlewaretoken]').val());
},
type: frm.attr('method'),
method: 'POST',
url: '',
data: data,
cache: false,
contentType: false,
processData: false,
success: function(data) {
console.log(data)
}
});
return false;
});
Run Code Online (Sandbox Code Playgroud)
我正在使用formdata。我看client-有数据。但是它们不会到达服务器(request.POST={})。可能是什么原因?
def post(self, request, *args, **kwargs):
print(request.GET, request.FILES, request.POST)
contact_form = ContactFormForm(request.POST, request.FILES)
if contact_form.is_valid():
contact_form = …Run Code Online (Sandbox Code Playgroud) 我有一个Django后端人员的端点,文档内容如下:
POST到/ api/1/photo-uploads /使用enctype ="multipart/form-data",文件名为"files []".
我一直在尝试使用jquery的AJAX方法使用formData发送上传的文件.我继续收到错误,表明文件未发送.当我查看有效载荷时,我看到了.
undefined
------WebKitFormBoundary9AzM2HQPcyWLAgyR
Content-Disposition: form-data; name="file"; filename="auzLyrW.jpg"
Content-Type: image/jpeg
Run Code Online (Sandbox Code Playgroud)
这并不一定意味着它没有发送,但肯定没有发布位置.我没有任何关于文件上传的验证.
var formData = new FormData();
formData.append('file', $('#file-upload').get(0).files[0]);
$.ajax({
url: '/api/1/photo-uploads/',
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false,
});
Run Code Online (Sandbox Code Playgroud)
当我在console.log时formData它只显示原型方法.append.因此,除了检查有效负载之外,我无法验证文件的数据是否正在发送.我可以登录,$('#file-upload').get(0).files[0]但我只看到文件本身的详细信息.因为我在本地测试它,上传位置应该像localhost:8000 /.
后端人员的印象是我正在做的事情.当我做一个简单的表单帖子它工作正常.我已经尝试了一些插件和基本方法,并且都已经生成了400 {"message": "No photos supplied.", "success": false}
任何想法,将不胜感激.
ajax ×8
jquery ×6
javascript ×5
file-upload ×4
django ×2
html5 ×2
angularjs ×1
api ×1
file ×1
html ×1
jsp ×1
laravel-5.4 ×1
php ×1
rest ×1
restangular ×1
servlets ×1