last day (15 days later) » 

11:02 AM
0
Q: YII2 как передать запрос посредством AJAX

dasauserНужно передать массив идшников посредством AJAX в php, но в консоли вылезает ошибка 400 (неверные параметры) Написал такой код на js: var xhr = new XMLHttpRequest(); var body = JSON.stringify({ id: checkedInputTagsArray //массив идшников }); console.l...

 
Убедитесь что вы передаете, crf token более подробнее тут: stackoverflow.com/a/27126356/7678419
 
@SergeyN, да, теперь запрос доходит до сервера, но сервер возвращает только 500 ошибку.
 
Теперь у вас ошибка на стороне сервера :) Попробуйте заменить json_encode на json_decode т.к функция encode преобразует объект в JSON строку а вам нужно сделать обратное действие
 
@SergeyN, да, точно, перепутал. спасибо. но я не могу понять, как принять данные и вернуть их для просмотра?
 
Если вы хотите сделать просто вернуть данные которые оправили на сервер воспользуйтесь этим примером: stackoverflow.com/a/41675108/7678419
 
11:02 AM
@SergeyN, сделал, но все равно не могу вернуть тело запроса.
 
Что возвращается в ответе сервера ?
 
ошибка 500
но при попытке вернуть что угодно
ответ успешен
т.е. 200
 
Снипет на который давал ссылку не помог ?
 
нет
он был прописан в behaviors до вашего совета
 
Хорошо, ошибка возникает когда пытаетесь осуществить действия над запросом ?
 
11:07 AM
да
 
Если сделать echo 'test' то будет ошибка ?
без парсинга запроса и лишнего кода
 
нет
у меня нет понятия как принять json
и как с ним работать на сервере
вроде делаю getBodyParams, но не работает
    $request = Yii::$app->request;
    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
    return "$request->getBodyParams()";
такой код не работает
 
это весь файл ?
 
нет, это экшен, принимающий запрос
 
11:13 AM
ошибка исчезает, но консоль пустует
страница не обновляется
 
страница ?
Вы же отправляете AJAX запрос
Страница и не должна обновляться
 
ну да, извините, я подразумевал содержимое страницы, которое я пытаюсь изменить с помощью запроса
в любом случае массив (json) не отображается
 
Вы вкладку network смотрите ?
 
да
 
Ответ пустой ?
 
11:19 AM
а где он должен отобразиться? если в консоли, то да
 
если вы его распечатает в консоле
 
пустой
а в нетворке возвращается
 
xhr.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText);

}
};
Добавьте это в ваш JS код
тут пример
 
теперь отображает
да, у меня похожая функция, но нету responce
        xhr.onreadystatechange = function() {
          if (this.readyState != 4) return;
          if (this.status != 200) {
            alert( 'ошибка: ' + (this.status ? this.statusText : 'запрос не удался') );
            return;
        }
 
Что отображает в консоле ?
 
11:26 AM
массив
все работает, спасибо.
 
Удачи )
 
 
2 hours later…
1:53 PM
добавьте, пожалуйста, ответ к вопросу, на случай если у кого то будет похожая проблема
мне помогли отключение csrf и проверка responce
 

last day (15 days later) »