我在一个名为'add.cpt'的页面中,它有一个图像列表。用户可以选择删除图像,但我无法使其工作。在点击的情况下,我尝试调用ajax尝试传递图像的名称和项目的ID(... / item / imageName),但它确实删除了图像并警告了delete_photo_file的内容。 CTP。看起来ajax正在使用URL但它没有发送数据来删除想要的文件。
上述ItemsController:
App::uses('File', 'Utility');
class ItemsController extends AppController{
[...]
public function deletePhotoFile(){
//$this->autoRender = false; //did not tested but maybe I need to use this
$imgName = //don't know how to get it from ajax call
$itemId = //don't know how to get it from ajax call
$file = new File($dir.'/'.$itemId.'/'.$imgName);
$file->delete();
}
}
Ajax Call(来自我的ctp文件):
$('#delete').click(function (){
[...]
var itemId=$('#itemId').val(); //comes from hidden input
var imgName = $('#imgName').val(); //comes from hidden input
$.ajax({
type: 'POST',
url:'http://localhost/html/Project/v5/CakeStrap/items/deletePhotoFile/',
data:{"itemId":itemId, imgName: imgName},
success: function(data){
alert(data); //alerts some HTML... seems to be delete_photo_file.ctp content
}
});
});
任何人都可以帮助我吗?谢谢!
答案 0 :(得分:2)
在ItemsController中,确保实际加载File实用程序类,方法是添加:
App::uses('File', 'Utility');
在您的课程定义之前的开头<?php
标记下方。在您的操作中,您只需使用$this->request->data
即可获取数据密钥。此外,返回delete()
函数的操作,以便您可以相应地触发AJAX成功/错误调用。
public function deletePhotoFile() {
$imgName = $this->request->data['imgName'];
$itemId = $this->request->data['itemId'];
/**
* Where is the $dir below actually set? Make sure to pass it properly!
* Furthermore, it's always cleaner to use DS constant
* (short for DIRECTORY_SEPARATOR), so the code will work on any OS
*/
$file = new File($dir . DS . $itemId . DS . $imgName);
return $file->delete();
}
最后,请注意AJAX调用中的引号:
data:{"itemId":itemId, imgName: imgName},
应该成为:
data:{"itemId":itemId, "imgName": imgName},
另外,你只需要调用imgName
JS var两次。
答案 1 :(得分:1)
在php $imgName = $this->request->data('imgName'); $itemId = $this->request->data('imgId');
中你可能想在变量名周围加上引号,因为它与传递的值的名称相同data: {'itemId': itemId, 'imgName': imgName},
答案 2 :(得分:0)
要在debug($this->request->data)
方法中简单地获取数据deletePhotoFile()
并检查浏览器控制台中的响应,它应该是一个格式良好的数组,其中包含您在ajax请求中发布的数据,你应该能够从那里解决剩下的问题。
您还需要考虑使用RequestHandler component,以便确保请求是ajax请求。