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