0

我在一个名为“add.cpt”的页面中,其中包含图像列表。用户可以选择删除图像,但我无法使其工作。在单击的情况下,我尝试调用 ajax 尝试传递图像的名称和项目的 id (.../item/imageName),但它确实删除了图像并提醒似乎是 delete_photo_file 的内容。 ctp。看起来 ajax 正在使用 URL,但它没有发送数据来删除想要的文件。

物品控制器:

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 调用(来自我的 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
  }
});

});

谁能帮我?谢谢!

4

3 回答 3

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},

否则,您只需调用imgNameJS var 两次。

于 2013-02-25T17:00:15.333 回答
1

在 php$imgName = $this->request->data('imgName'); $itemId = $this->request->data('imgId');中,在 js 中,您可能希望在变量名周围加上引号,因为它与正在传递的值的名称相同data: {'itemId': itemId, 'imgName': imgName},

于 2013-02-25T16:56:49.947 回答
0

debug($this->request->data)在您的deletePhotoFile()方法中简单地获取数据并检查浏览器控制台中的响应,它应该是一个格式良好的数组,其中包含您在 ajax 请求中发布的数据,您应该能够从那里计算出其余部分。

您还需要考虑使用RequestHandler 组件,以便确保请求是 ajax 请求。

于 2013-02-25T16:57:42.067 回答