【问题标题】:Upload image using AJAX in Joomla 3.0 MVC在 Joomla 3.0 MVC 中使用 AJAX 上传图片
【发布时间】:2014-11-21 22:43:04
【问题描述】:

我正在尝试在 Joomla MVC 框架中使用 AJAX jquery 上传图像。

下面是default.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>

以下是用于 imageUpload 任务的 controller.php 中的 PHP 代码。

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 组件路径,它就不起作用了。

【问题讨论】:

  • 这个组件com_jsmdownload是否需要用户登录才能上传图片?还是会让任何人?
  • 为什么不使用内置包上传呢?上传图片很危险,您需要内置身份验证检查、授权检查、对名称的广泛检查以及图片本身是否包含恶意代码。在推出您自己的网站之前,我会仔细阅读 OWASP 网站。
  • @cppl - 是的,此组件仅适用于注册用户。 Joomla 是否有内置包可以上传图片?
  • 我设法让它工作。参考链接joomla.stackexchange.com/questions/5342/…
  • 字段类型媒体会给你一个上传者。

标签: php jquery ajax joomla


【解决方案1】:

您必须将表单传递给 FormData 对象,您所拥有的是按钮。
在按钮单击事件处理程序中this 指的是按钮而不是表单。
选择表单并将其传递给 FormData 构造函数

new FormData($(this).closest('form')[0]),

【讨论】:

  • 现在试过了,结果还是一样。我无法在 PHP 中获取表单数据。
猜你喜欢
  • 2014-02-24
  • 2012-03-25
  • 2020-01-11
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
相关资源
最近更新 更多