Laravel AJAX вызов с методом PUT - PullRequest
0 голосов
/ 10 февраля 2019

поэтому я пытаюсь отправить новую позицию предметов через AJAX, и все это должно произойти, когда я «уронил» предмет.Так что это мой «инвентарь», это div, и у меня есть изображения в этих div, когда я перемещаю его, он должен сделать вызов AJAX.Я получаю только 500 (Внутренняя ошибка сервера) в консоли Chrome

$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 голосов
/ 11 февраля 2019

ОК, так что проблема была в том, что моя позиция была нулевой, поэтому в контроллере он ничего не мог найти, и это была ошибка.

0 голосов
/ 10 февраля 2019

У 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'
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...