За последние 24 часа нас посетили 22588 программистов и 1277 роботов. Сейчас ищут 757 программистов ...

ajax запрос

Тема в разделе "Laravel", создана пользователем Dimon2x, 29 сен 2018.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Не понимаю, почему, если запрос делать методом get, то всё работает, а если методом post, то пишет ошибку 405 (Method Not Allowed)

    get

    Код (Javascript):
    1.  xmlhttp.open("GET","/myprofile/specialization/update/"+idSpec,true);
    2. xmlhttp.send();
    PHP:
    1. Route::get('/myprofile/specialization/update/{id}', 'MasterController@updateSpecialization');
    post


    Код (Javascript):
    1.  xmlhttp.open("POST","/",true);
    2.  xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')    
    3.  xmlhttp.send('/myprofile/specialization/update/' + idSpec);
    PHP:
    1. Route::post('/myprofile/specialization/update/{id}', 'MasterController@updateSpecialization');
    --- Добавлено ---
    Так тоже не работает

    Код (Javascript):
    1.   xmlhttp.open("POST","/",true);
    2. xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')              
    3. xmlhttp.send('name=category&id=' + idSpec);    
    PHP:
    1. Route::post('/category/{?}', function(){
    2.     echo 44444;
    3. });
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
     
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @nospiou я же указал, что на корень нужно
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    --- Добавлено ---
    Ну тогда причем здесь
    Где Пост корня?
    --- Добавлено ---
    Пора бы уже fetch изучай и с сервис воркерами работать)
     
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @nospiou а как тогда принять пост запрос в ларавел? На чистом php всё работало
     
  6. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Код (Text):
    1. var xhr = new XMLHttpRequest();
    2. xhr.open('POST', '/', true);
    3. xhr.send('user=person&pwd=password&organization=place&requiredkey=key');
    Код (Text):
    1. Route::post('/', 'MasterController@updateSpecialization');
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    CSRF-токен не забываем в запрос включать.
     
  8. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Нада же всего недавно сбежал от классики и уже успел забыть. К хорошему быстро привыкаешь:)
    Вообще не понимаю зачем мучать себя xhr если в ларке есть уже настроенные jquery axios
     
  9. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @mkramer а как его включить в ajax?
     
  10. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Dimon2x
    Открываешь resources/assets/js/bootstrap.js и изучаешь...
     
  11. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Добавил токен

    PHP:
    1. <head>
    2.     <meta class="token" content="{{ csrf_token() }}">
    3. </head>
    Проверил, что бы он попадал в переменную token, попадает.

    Код (Javascript):
    1.  xmlhttp.open("POST","/",true);
    2.                  xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded', 'X-CSRF-Token', token)
    3.                
    4.         xmlhttp.send('name=category&id=' + idSpec);
    PHP:
    1. Route::post('/', function(Request $request){
    2.     dd($request);
    3. });
    И при отправке выводит ошибку в консоле

    Код (Text):
    1. POST http://prorab/ 419 (unknown status)
    Подчёркивает эту строку

    Код (Text):
    1. xmlhttp.send('name=category&id=' + idSpec);    
     
  12. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    откуда 4 параметра?
     
  13. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Оказывается надо было так

    Код (Javascript):
    1. xmlhttp.open("POST","/",true);
    2. xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    3. xmlhttp.setRequestHeader('X-CSRF-Token', token);
    4. xmlhttp.send('name=category&id=' + idSpec);    
     
  14. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    А так разве не прикольнее?
    Код (Javascript):
    1. axios.post('/', {
    2.   name: 'category',
    3.   id: idSpec
    4. }).then(res => {
    5.   console.log(res)
    6. })
     
  15. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @nospiou я ничего про это не знал
     
  16. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @nospiou не понимаю, почему выдаёт ошибку 500, если токен передаётся?

    PHP:
    1. public function updateOutwards($id)
    2.     {
    3.         return $id;
    4.     }
    PHP:
    1. Route::post('/outwards', 'MasterController@updateOutwards');
    Код (Javascript):
    1. function outwardsFoo(id) {
    2.         var token = document.querySelector('.token').getAttribute('content');
    3.  
    4.         var saveOutwards = document.querySelector('.save-outwards');
    5.          xmlhttp=new XMLHttpRequest();
    6.                            
    7.                xmlhttp.onreadystatechange=function() {
    8.                         if (this.readyState==4 && this.status==200) {
    9.                             console.log(this.responseText);
    10.                           }
    11.                    }
    12.                
    13.                
    14.                  xmlhttp.open("POST","/outwards",true);
    15.                  xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    16.                  xmlhttp.setRequestHeader('X-CSRF-Token', token);
    17.                
    18.                 xmlhttp.send('id=' + id);
    19.              
    20.     }
    HTML:
    1. <select name="outwards" onchange="outwardsFoo(this.value)">                      
    2.                     <option value="1">Нет</option>
    3.                     <option value="2">Да</option>
    4.               </select>
     
  17. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Dimon2x
    смотри логи tail -f path/to/php.log
    Юзай дебагер https://github.com/barryvdh/laravel-debugbar
    --- Добавлено ---
    Постом на упдате? А каже put patch?
     
  18. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @nospiou я разобрался, надо было вписать аргумент Request для public function updateOutwards()