Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在cakephp中未使用Ajax上载文件_Php_Jquery_Ajax_File_Cakephp - Fatal编程技术网

在cakephp中未使用Ajax上载文件

在cakephp中未使用Ajax上载文件,php,jquery,ajax,file,cakephp,Php,Jquery,Ajax,File,Cakephp,我正在尝试使用Ajax将图像上传到服务器。我知道使用Cakephp上传文件的代码,但首先我只想确保通过打印formdata将数据/文件上传到服务器。但似乎只有我在文本框中输入的数据被发布,而不是我选择的文件。任何帮助都将不胜感激。链接下面的代码 HTML 在动控制器 if($this->request->is('post')){ $this->Layout=null; $this->autoRender=false;

我正在尝试使用Ajax将图像上传到服务器。我知道使用Cakephp上传文件的代码,但首先我只想确保通过打印formdata将数据/文件上传到服务器。但似乎只有我在文本框中输入的数据被发布,而不是我选择的文件。任何帮助都将不胜感激。链接下面的代码

HTML

在动控制器

if($this->request->is('post')){
            $this->Layout=null;
            $this->autoRender=false;
            $formdata=$this->request->data;
            print_r($formdata);
            exit;
        }

使用这种AJAX表单提交方法,您将无法使用AJAX上传文件

如果您不喜欢使用第三方插件,如
dropzone.js
Jquery file upload
, 您可以使用
XMLHttpRequest
。下面是一个例子:

$('#newcatform').on('submit', function(ev){
    ev.preventDefault();

   var forms = document.querySelector('form#newcatform');

   var request = new XMLHttpRequest();

   var formDatas = new FormData(forms);
   request.open('post','yourControllerFunction');
   request.send(formDatas);

   request.onreadystatechange = function() {
    if (request.readyState === 4) {
      if (request.status === 200) {

       //Request was OK show success message

     } else {
                       // Request not OK, show error message

                     }
                   }
             });
在控制器中,使用:

if($this->request->is('post')){
   $data = $this->request->data;
   echo "<pre>",print_r($data),"</pre>";
   //You should be able to see file data in this array
}
if($this->request->is('post')){
$data=$this->request->data;
回显“”,打印($data),“”;
//您应该能够看到此阵列中的文件数据
}

尝试了您建议的代码,但在控制器中打印时仍然没有文件数据。这是控制台中的o/p。数组([newcatname]=>ASAS)这对我来说很好,我上传文件没有任何问题。当您检查浏览器时。单击“网络”选项卡,然后提交表单,查看是否有任何错误。我已编辑代码以删除一个额外的结束“}”。希望它能正常工作。还要确保将处理表单提交的函数的路由添加到路由中。p使用相同的代码,但我只获取数组([newcatname]=>awdawd),文件仍然缺失。。是否需要setRequestHeader?显示您正在使用的完整代码。XMLHttpRequest和控制器
$('#newcatform').on('submit', function(ev){
    ev.preventDefault();

   var forms = document.querySelector('form#newcatform');

   var request = new XMLHttpRequest();

   var formDatas = new FormData(forms);
   request.open('post','yourControllerFunction');
   request.send(formDatas);

   request.onreadystatechange = function() {
    if (request.readyState === 4) {
      if (request.status === 200) {

       //Request was OK show success message

     } else {
                       // Request not OK, show error message

                     }
                   }
             });
if($this->request->is('post')){
   $data = $this->request->data;
   echo "<pre>",print_r($data),"</pre>";
   //You should be able to see file data in this array
}