0

画像のリストがある「add.cpt」というページにいます。ユーザーには画像を削除するオプションがありますが、機能させることはできません。クリックのイベントで、画像の名前とアイテムの ID (.../item/imageName) を渡そうとする ajax を呼び出そうとしますが、画像を削除し、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},

imgNameそれ以外の場合は、 JS var を 2 回呼び出すだけです。

于 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リクエストでPOSTしたデータを含む適切にフォーマットされた配列である必要があり、残りはそこから処理できるはずです。

また、 RequestHandlerコンポーネントの使用を検討して、リクエストがajaxリクエストであることを確認することもできます。

于 2013-02-25T16:57:42.067 に答える