Добрый день. Подскажите пожалуйста почему GET запрос на эту функцию отвечает нормально, а POST запрос возвращает ошибку no-referrer-when-downgrade? Вот функция в контроллере PHP: class TestController extends Controller{ public function actionInsert(){ return 123; } } Вот сам ajax запрос: Код (Javascript): postAjax('index.php?r=test/insert', {test:'TEST'}, function(data){ console.log(data); }); function postAjax(url, data, success) { var params = typeof data == 'string' ? data : Object.keys(data).map( f unction(k){ return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) } ).join('&'); var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); xhr.open('POST', url); xhr.onreadystatechange = function() { if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); } }; xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send(params); return xhr; }
телепатов нема ты уверен что тебе именно та функция отвечает? не видно роутера да и ссылки вида index.php?r=test/insert какие то странные
@ADSoft при GET запросе та. Я тут нарыл пока про <?= Html::csrfMetaTags() ?> но он у меня есть в head Вроде как у yii без этого тега не пускает post запросы.
Если так напишу данные передадутся, но хотелось бы просто объект отправить: PHP: public function actionInsert(){ $get = Yii::$app->request->get(); return json_encode($get); } Код (Javascript): var name = document.getElementById('name').getAttribute('data'); getAjax('index.php?r=test/insert&name='+name, function(data){ var json = JSON.parse(data); console.log(json); }); function getAjax(url, success) { var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); xhr.open('GET', url); xhr.onreadystatechange = function() { if (xhr.readyState>3 && xhr.status==200) success(xhr.responseText); }; xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.send(); return xhr; } Как подобный массив get запросом отправить?: Код (Javascript): var array= { 'name':document.getElementById('name').getAttribute('data'), 'name2': document.getElementById('name2').innerHTML, 'name3': document.getElementById('name3').innerHTML, 'name4': +textareaKeyM.value }; --- Добавлено --- Написал так, но мне кажется это через задницу Код (Javascript): getAjax('index.php?r=terminal/insert&name='+a['name']+'&name2='+a['name2']+'&name3='+a['name3']+'&name4='+a['name4'], function(data){ var json = JSON.parse(data); console.log(json); });
не знаю, как в yii2, но в ларке надо ещё токен указывать PHP: xmlhttp.open("POST","/",true); xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlhttp.setRequestHeader('X-CSRF-Token', token); xmlhttp.send('id=' + idSpec);
В Yii2 также. Если jQuery используется для AJAX-а, то yii2 сам токен подставляет, а так надо ручками.