За последние 24 часа нас посетили 21855 программистов и 988 роботов. Сейчас ищут 680 программистов ...

AJAX POST запрос возвращает ошибку no-referrer-when-downgrade

Тема в разделе "Yii", создана пользователем Artur_hopf, 12 дек 2018.

  1. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Добрый день. Подскажите пожалуйста почему GET запрос на эту функцию отвечает нормально, а POST запрос возвращает ошибку no-referrer-when-downgrade?
    Вот функция в контроллере
    PHP:
    1. class TestController extends Controller{
    2.  
    3.    public function actionInsert(){
    4.      return 123;
    5.    }
    6. }
    Вот сам ajax запрос:
    Код (Javascript):
    1. postAjax('index.php?r=test/insert', {test:'TEST'}, function(data){
    2.    console.log(data);
    3. });
    4.  
    5. function postAjax(url, data, success) {
    6.          var params = typeof data == 'string' ? data : Object.keys(data).map(
    7.          f    unction(k){ return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) }
    8.           ).join('&');
    9.  
    10.     var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    11.      xhr.open('POST', url);
    12.     xhr.onreadystatechange = function() {
    13.     if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); }
    14.    };
    15.     xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    16.     xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    17.     xhr.send(params);
    18.     return xhr;
    19. }
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    телепатов нема
    ты уверен что тебе именно та функция отвечает?
    не видно роутера
    да и ссылки вида index.php?r=test/insert какие то странные
     
  3. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @ADSoft при GET запросе та. Я тут нарыл пока про <?= Html::csrfMetaTags() ?> но он у меня есть в head
    Вроде как у yii без этого тега не пускает post запросы.
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Если так напишу данные передадутся, но хотелось бы просто объект отправить:
    PHP:
    1. public function actionInsert(){
    2.    $get = Yii::$app->request->get();
    3.    return json_encode($get);
    4. }
    Код (Javascript):
    1. var name = document.getElementById('name').getAttribute('data');
    2. getAjax('index.php?r=test/insert&name='+name, function(data){
    3.    var json = JSON.parse(data);
    4.    console.log(json);
    5. });
    6.  
    7. function getAjax(url, success) {
    8.    var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    9.     xhr.open('GET', url);
    10.     xhr.onreadystatechange = function() {
    11.     if (xhr.readyState>3 && xhr.status==200) success(xhr.responseText);
    12.     };
    13.     xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    14.     xhr.send();
    15.     return xhr;
    16. }
    Как подобный массив get запросом отправить?:
    Код (Javascript):
    1. var array= {
    2.    'name':document.getElementById('name').getAttribute('data'),
    3.    'name2': document.getElementById('name2').innerHTML,
    4.    'name3': document.getElementById('name3').innerHTML,
    5.    'name4': +textareaKeyM.value
    6. };
    --- Добавлено ---
    Написал так, но мне кажется это через задницу :confused:
    Код (Javascript):
    1. getAjax('index.php?r=terminal/insert&name='+a['name']+'&name2='+a['name2']+'&name3='+a['name3']+'&name4='+a['name4'], function(data){
    2. var json = JSON.parse(data);
    3. console.log(json);
    4. });
     
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    не знаю, как в yii2, но в ларке надо ещё токен указывать

    PHP:
    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('id=' + idSpec);  
    5.  
     
    Artur_hopf нравится это.
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @Dimon2x завтра попробую, спасибо
     
  7. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    В Yii2 также. Если jQuery используется для AJAX-а, то yii2 сам токен подставляет, а так надо ручками.