我正在尝试使用jquery http://code.google.com/p/ocupload/wiki/Documentation的“一键上传”插件
它是一个插件,可以将普通输入类型=“文件”更改为您想要的任何元素,例如div,因此当您单击此div时,将打开文件浏览器,允许您选择要上载的文件。然后它提交一个隐藏的形式somewho涉及一个iframe,我相信这个概念是众所周知但不是我。
无论如何,到目前为止一切都那么好......我有我的div打开文件broswer。
问题是,当选择文件时,插件应该自动将表单提交给您定义的操作。这似乎没有正确发生,我认为这可能与我瞄准表格的行为有关。
所以在我看来添加一个新的“瓷砖”我有:
<div id="TileImageUpload">Upload an image</div>
然后将javascript附加到div:
$(document).ready(function(){
//one click image upload
var myUpload = $('#TileImageUpload').upload({
name: 'file',
action: '../tiles/uploadImage',
enctype: 'multipart/form-data',
params: {upload:'Upload'},
autoSubmit: true,
onSubmit: function() {
alert('submitted');
$('#upload_status').html('').hide();
loadingmessage('Please wait, uploading file...', 'show');
},
onComplete: function(response) {
alert(response);
},
onSelect: function() {}
});
});
在上面,action参数意味着指向我的TilesController action =&gt; uploadImage。看起来像:
function uploadImage() {
if ($_POST["upload"]=="Upload") {
return 'wooHoo';
} else {
return 'BooHoo';
}
}
注意我也尝试回复'WoHoo'等但没有什么区别。
所以基本上如果有一个成功的表单帖子那么它应该将WooHoo返回到javascript,然后应该提醒它。
这没有发生。有谁知道为什么。就像我说的那样,我认为可能与表单行为有关,但我已经尝试过,我可以思考。
插件的实际JS并不大,可能会在这里发布所有内容。它可以在我上面发布的链接上找到,如果某种灵魂怜悯和幻想帮助我。
答案 0 :(得分:0)
你不应该使用'return',而是尝试'echo'。
但是,由于在这种情况下您没有使用视图文件进行操作,因此您还应禁用“autoRender”;
$this->autoRender = false;
否则CakePHP将抛出'未找到视图'异常。
此外,要获取CakePHP中发布的数据,请使用Request对象;
例如:
$this->autoRender = false;
if($this->request->is('post')) {
echo 'data is posted. This is the content of the request:';
debug($this->request->data);
} else {
echo 'no form is posted';
}
最后,如果您想返回JSON数据,请参阅手册的这些部分
http://book.cakephp.org/2.0/en/controllers/request-response.html#cakeresponse
http://book.cakephp.org/2.0/en/views/json-and-xml-views.html