使用方法PUT的Laravel AJAX调用

时间:2019-02-10 19:24:38

标签: ajax laravel

所以我想做的是通过AJAX发送物品的新位置,当我“放下”物品时,所有这一切都会发生。 这就是这些“ div”,这是我的“清单”,这些div中有图像,当我移动它时,它应该进行AJAX调用。我在Chrome控制台中仅收到500(内部服务器错误)

$index=1;
            foreach ($inventories as $inventory) {
                if($inventory->id_w==null){
                    echo '<div id="policko'.$index.'" class="inventar" data-hasPicture="false" ondrop="drop(event)" ondragover="allowDrop(event)"></div>';
                    $index++;
                }else{
                   echo '<div id="policko'.$index.'" class="inventar" data-hasPicture="true" ondrop="drop(event)" ondragover="allowDrop(event)">
                <img src="/images/coin.png" class="obrazek" data-position='.$index.' id='.$inventory->position.' draggable="true" ondragstart="drag(event)">
                </div>';
                $index++;
                }
            }

然后我将AJAX设置称为脚本

$.ajaxSetup({
  headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

最后,还有更新库存的功能

    function updateInventory(itemId,position)
{
    var characterInventoryID={!! json_encode($character->id) !!};
    $.ajax({
  url: '/updateInventory',
  method: 'PUT',
  data: { itemID: itemID,characterInventoryID:characterInventoryID, position:position, _token: '{{csrf_token()}}' },
  dataType: 'json'
});
}

路线

Route::put('/updateInventory','InventoryController@updateInventory');

还有控制器功能,在这里找到具有当前位置和旧位置的行,并进行切换

public function updateInventory(Request $request){
    if(request()->ajax()){
        $pos=$request->position;
        $idItem=$request->itemID;
        $charID=$request->characterInventoryID;
        $where = ['id_c' => $charID, 'position' => $pos];
        $whereOld = ['id_c' => $charID, 'position' => $idItem];
        $idi = Inventory::where($where)->first()->id;
        $idiOld = Inventory::where($whereOld)->first()->id;
        $i=Inventory::find($idi);
        $iOld=Inventory::find($idiOld);
        $iOld->position=$i->position;
        $i->position=$pos;
        $i->save();
        $iOld->save();
    }

}

希望这就是全部

2 个答案:

答案 0 :(得分:0)

ajax没有方法选项,您可以将_method作为数据传递 尝试以下代码:

function updateInventory(itemId,position)
{
    var characterInventoryID={!! json_encode($character->id) !!};
    $.ajax({
    url: '/updateInventory',
    type: 'POST',
    data: { _method:'PUT', itemID: itemID,characterInventoryID:characterInventoryID, position:position, _token: '{{csrf_token()}}' },
    dataType: 'json'
    });
}

答案 1 :(得分:0)

好吧,问题是我的位置为空,因此在控制器中找不到任何东西,这就是错误。