我正在尝试使用ajax上传文件和变量值,但它不会发送。 目前,我正在使用form和submit,但是我需要传递这个变量体 - 来获取body的宽度。如何使用Ajax?
我的代码是:
$(document).ready(function (e) {
$("#form").on('submit',(function(e) {
var file = new FormData($('form')[0]);
var body = $('body').width();
e.preventDefault();
$.ajax({
url: "image/upload",
type: "POST",
data: {body:body, file:file},
contentType: false,
cache: false,
processData:false,
success: function(data){
}
});
}));
});
<form id="form">
<label>Upload Image File:</label><br/>
<input name="image" type="file" />
<input type="submit" value="Submit" />
</form>
我的控制器是:
public function action_create()
{
$error = 'false';
$bg_path = '';
if(!empty($_FILES["file"]))
{
if ((($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& in_array($extension, $allowedExts)) {
if ($_FILES["file"]["error"] > 0)
{
$error = "Error: " . $_FILES["file"]["error"] . "<br>";
}
else
{
$date = date('YMd');
$path = DOCROOT.'assets/uploads/'.$date.'/';
if (!file_exists($path)) {
mkdir($path, 0775);
}
//other code
}
}
}
答案 0 :(得分:1)
您应该将body
变量附加到您要发送的FormData
,而不是作为对象的一部分。试试这个:
$("#form").on('submit', function(e) {
e.preventDefault();
var formdata = new FormData($('form')[0]);
formdata.append('body', $('body').width());
$.ajax({
url: "image/upload",
type: "POST",
data: formdata
contentType: false,
cache: false,
processData: false,
success: function(data) {
console.log('request successful!');
}
});
});
另请注意,您需要设置enctype
的{{1}}属性,因为您在数据中包含了一个文件:
form