我正在尝试在Joomla MVC框架中使用AJAX jquery上传图像。
下面是默认值.php它添加了下面的javascript脚本代码
$('#icon-submit').on('click',(function(e) {
$.ajax({
url: "index.php?option=com_jsmdownload&task=imageUpload",
type: "POST",
data: new FormData(this),
contentType: false,
cache: false,
processData:false,
success: function(data){
alert(data);
},
error: function(){
}
});
}));
下面是包含一个简单的文件框和一个按钮的HTML代码
<form action="<?php echo JRoute::_('index.php'); ?>" method="POST" name="adminForm" id="adminForm" enctype="multipart/form-data">
<input type="file" id="and_36x36" name="and_36x36">
<input id='icon-submit' type='button' value='Next ->' />
</form>
下面是控制器中的 PHP 代码.php用于 imageUpload 任务。
function imageUpload(){
JFactory::getDocument()->setMimeEncoding( 'application/json' );
print_r($_FILES);
JFactory::getApplication()->close();
}
一旦我选择文件并单击按钮,ajax 函数调用,PHP 函数也调用,但表单数据在里面不可用。
print_r 命令始终打印一个空数组。 我不知道我做错了什么。 我想获取选定的文件并将它们上传到服务器并返回浏览器。
我参考了多个帖子,但找不到答案。 有人可以请指教吗?
更新 1
如果我将一个独立的 PHP 文件设置为 URL,那么它可以工作。 例如
url: "http://localhost/test/indextest.php",
但是如果我使用控制器设置 Joomla 组件路径,它不起作用。
您必须将表单传递给 FormData 对象,您拥有的是按钮。
在按钮单击事件处理程序中,this
引用按钮而不是窗体。
选择窗体并将其传递给 FormData 构造函数
new FormData($(this).closest('form')[0]),