在Joomla 3.0 MVC中使用AJAX上传图像


Upload image using AJAX in Joomla 3.0 MVC

我正在尝试在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]),