【问题标题】:Laravel Ajax delete each element from arrayLaravel Ajax 从数组中删除每个元素
【发布时间】:2022-02-06 05:58:03
【问题描述】:

我正在尝试从通过 Append 和图像显示的数组中删除每个元素。

刀片:

<h4>Menu Images</h4>
<div class="col-md-12" id="cardImages"></div>

Ajax function

$(document).on('click', '.edit', function(){
  $("#cardImages").empty();
  var id = $(this).attr("id");
  $('#form_output').html('');
  $.ajax({
      url: "{{route('restaurantOffers.fetchdata')}}",
      method: 'get',
      data: {id:id},
      dataType: 'json',
      success:function(data)
      {
          $('#contract_id').val(id);                
          $('#editContract').modal('show');
          $('#action').val('Speichern');
          $('.modal-title').text('Daten aktualisieren');
          $('#button_action').val('update');

          var cardUp = data.cardUpload;

          $.each(cardUp, function(index,value) {
            $('#cardImages').append('<a href="{{ url('/storage/offerPic/')}}'+'/' + value +'" download ><img src="{{ url('/storage/offerPic/')}}'+'/' + value +'" alt=""></a><a class="btn btn-danger" target="_blank" rel="nofollow noreferrer" href="" method="post">X</a>');

        });

      }
  })
});

控制器:

function fetchdata(Request $request)
{
    $id = $request->input('id');
    $data = RestaurantOffer::find($id);
    $output = array(            
        'cardUpload'    =>  json_decode($data->cardUpload),            
    );
    echo json_encode($output);
}

cardUpload 列记录存储为数组,例如。 (["image1.png","image2.png"])。

图像在 cardImages div 中显示良好,但我想创建一个函数来删除这些图像中的每一个。

问题是如何一个一个地删除每个数组元素。

PS:这些图像在编辑按钮后显示。所以,我必须在 get 方法中创建 delete 或 post 方法。

提前谢谢你

【问题讨论】:

    标签: php mysql arrays ajax laravel


    【解决方案1】:

    要删除特定图像,您应该为每个图像确定一个特定的 ID:

    ([1=>"image1.png",2=>"image2.png"]).

    function delete(Request $request)
    {
        $id = $request->input('id');
        $imageIdToDelete=$request->input('image_index') ;
        $data = RestaurantOffer::find($id);
        $images=json_decode($data->cardUpload,true) ;
        if(isset($images[$imageIdToDelete])){
        unset($images[$imageIdToDelete]) ;
        }
        
    
        $data->update([
           'cardUpload'=>json_encode($images)
                         ]) ;
        
    }
    

    删除按钮:

      $.each(cardUp, function(index,value) {
         $('#cardImages').append('<a href="{{ url('/storage/offerPic/')}}'+'/' + value +'" download >
    <img src="{{ url('/storage/offerPic/')}}'+'/' + value +'" alt=""></a>
    
        <button class="btn btn-danger delete" data-index=index  >delete</button>');
    
            });
    
    
    $('delete').on('click',function(){
    var image_index= $(this).attr('data-index')
    })
    
    $.ajax({
       url: "{{route('restaurantOffers.delete')}}",
       method: 'get',
       data: {image_index:image_index},
       dataType: 'json',
    })
    

    请不要建议编辑,如果你建议我不能编辑它并且必须发布另一个答案。

    【讨论】:

      【解决方案2】:

      要删除特定图像,您应该为每个图像确定一个特定的 id:

      ([1=>"image1.png",2=>"image2.png"]).
      

      收件人:

      function delete(Request $request)
      {
          $id = $request->input('id');
          $imagesIdToDelete=$request->input('imagesIdToDelete') ;
          $data = RestaurantOffer::find($id);
          $images=json_decode($data->cardUpload,true) ;
          foreach($images as $k=>$image )
          {
             if(in_array($k,$imagesIdToDelete) )
               {
                unset($images[$k]) ;
                }
          }
      
          $data->update([
             'cardUpload'=>json_encode($images)
                           ]) ;
          
      }
      

      【讨论】:

      • 好的,创建这个函数后,为每个图像确定特定的ID,我在哪里调用这个函数来删除图像。正如您在上面看到的,我通过 append() 在 Ajax 中创建了一个按钮,它应该执行此操作。按钮:&lt;a class="btn btn-danger" target="_blank" rel="nofollow noreferrer" href="" method="post"&gt;X&lt;/a&gt;。我必须这样打电话还是以任何其他方式打电话。
      猜你喜欢
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 2015-06-15
      • 2011-10-31
      • 1970-01-01
      相关资源
      最近更新 更多