За последние 24 часа нас посетили 18677 программистов и 1603 робота. Сейчас ищут 905 программистов ...

ajax PHP метод POST

Тема в разделе "PHP для новичков", создана пользователем Dimon2x, 29 мар 2018.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Не понимаю, почему не передаётся переменная id?

    Код (Javascript):
    1.                                                                                                
    2. <script>
    3.     var likeComment = document.querySelectorAll('.like-comment');
    4.    
    5.     likeComment.forEach(function(element, i){
    6.         likeComment[i].addEventListener('click', function(e) {
    7.             e.preventDefault();
    8.             console.log(e.target.dataset.id);
    9.          
    10.            var commentId = e.target.dataset.id;
    11.          
    12.             xmlhttp=new XMLHttpRequest();
    13.            
    14.             xmlhttp.onreadystatechange=function() {
    15.         if (this.readyState==4 && this.status==200) {
    16.                     likeComment[i].innerHTML=this.responseText;
    17.         }
    18.             }
    19.         xmlhttp.open("POST","/comment/like", true);
    20.         xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    21.         xmlhttp.send("id="+commentId);
    22.         })
    23.     })
    24.                                                                                                    
    25. </script>
    Отправка работает методом POST, это я проверял, выведет 4444, если убрать $id

    PHP:
    1. public function like($id)
    2.     {
    3.         if ( $_SERVER['REQUEST_METHOD'] == 'POST' ){
    4.             echo 4444;
    5.         }
    6.      
    7.        echo $id;
    8.        echo true;
    9.     }
    Но почему, если в send, что-то передать, то это не передаётся? Выводит ошибку

    Uncaught Invoker\Exception\NotEnoughParametersException: Unable to invoke the callable because no value was given for parameter 1 ($id) in
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Кто вас заставляет так делать если можно {id: commentId} ?
    console.log(commentId)?
    like($id) - а роут точно так работает?
    var_dump($_POST)?
    А может xmlhttp.open("POST","/comment/like/"+commentid,true); ?
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    один момент. Ты думаешь что отправленные post данные в ключе id автоматически запишутся в переменную $id ? когда смеяться можно ?
     
  4. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @nospiou в консоле отображается, использую FastRoute
    --- Добавлено ---
    @MouseZver должны же записаться, у меня так в старом проекте
    --- Добавлено ---
    @MouseZver Почему параметр не передаётся?
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    не должны... видимо глобальные переменные включены в старом проекте - это зло
    а смотреть что приходит надо в $_POST['id']
     
  6. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    ой туплю, в том проекте был совсем другой роутинг, всё разобрался