Не могу получить данные из POST Ajax
Не могу получить данные из POST Ajax
Проблема в следующем. Отправляю ajax запрос не из формы а функцией $.ajax({ }) если это делаю GET, то всё работает. Но как только меняю на POST, сразу жопа.
Перерыл весь инет. Пробовал отправлять csrfToken в запросе data: {'id': '2', csrfParam : csrfToken} не помогло.
Работает следующим образом. Когда в action я пишу $data = $request->post(); и потом пробую обратиться к $data вылетает какая-то ошибка. Если без этого, то любой код работает и даже отправляется ответ.
Проверка ($request->isPost && $request->isAjax) проходит.
Пришёл к выводу, что не могу почему-то получить данные из post. Кто-нибудь сталкивался с такой проблемой.
Перерыл весь инет. Пробовал отправлять csrfToken в запросе data: {'id': '2', csrfParam : csrfToken} не помогло.
Работает следующим образом. Когда в action я пишу $data = $request->post(); и потом пробую обратиться к $data вылетает какая-то ошибка. Если без этого, то любой код работает и даже отправляется ответ.
Проверка ($request->isPost && $request->isAjax) проходит.
Пришёл к выводу, что не могу почему-то получить данные из post. Кто-нибудь сталкивался с такой проблемой.
Re: Не могу получить данные из POST Ajax
"какаято ошибка" ... какая ?
что в дебаге пишет - что пришло ?
что в дебаге пишет - что пришло ?
Re: Не могу получить данные из POST Ajax
"58ec33be4363f";
s:3:"url";
s:41:"http://backend.yii.mini/admin/ajax/delete";
s:4:"ajax";
i:1;
s:6:"method";
s:4:"POST";
s:2:"ip";
s:9:"127.0.0.1";
s:4:"time";
i:1491874750;
s:10:"statusCode";
i:200;
s:8:"sqlCount";
i:0;
s:9:"mailCount";
i:0;
код action:
public function actionDelete()
{
$request = Yii::$app->request;
if ($request->isPost && $request->isAjax)
{
$data = $request->post();
$path = Yii::getAlias("@backend/public/img/1.txt");
$file = fopen($path,"w");
fwrite($file,var_dump($data));
fclose($file);
//$mySaveId = $data['id'];
echo '89';
}
}
код js:
function send_data(ajax_url, method)
{
var csrfParam = $('meta[name="csrf-param"]').attr("content");
var csrfToken = $('meta[name="csrf-token"]').attr("content");
$.ajax({
type: method,
url: ajax_url,
data: {'id': '2', csrfParam : csrfToken},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
//do something
alert(data);
},
error: function (errormessage) {
//do something else
alert("not working");
}
});
}
работает это так. если отправляю запрос, то после var_dump($data) код вылетает(так как не приходит '89' из echo), и срабатывает alert("not working"). Если убрать var_dump($data) и заменить его значением, то в ответе приходит '89' из echo.
s:3:"url";
s:41:"http://backend.yii.mini/admin/ajax/delete";
s:4:"ajax";
i:1;
s:6:"method";
s:4:"POST";
s:2:"ip";
s:9:"127.0.0.1";
s:4:"time";
i:1491874750;
s:10:"statusCode";
i:200;
s:8:"sqlCount";
i:0;
s:9:"mailCount";
i:0;
код action:
public function actionDelete()
{
$request = Yii::$app->request;
if ($request->isPost && $request->isAjax)
{
$data = $request->post();
$path = Yii::getAlias("@backend/public/img/1.txt");
$file = fopen($path,"w");
fwrite($file,var_dump($data));
fclose($file);
//$mySaveId = $data['id'];
echo '89';
}
}
код js:
function send_data(ajax_url, method)
{
var csrfParam = $('meta[name="csrf-param"]').attr("content");
var csrfToken = $('meta[name="csrf-token"]').attr("content");
$.ajax({
type: method,
url: ajax_url,
data: {'id': '2', csrfParam : csrfToken},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
//do something
alert(data);
},
error: function (errormessage) {
//do something else
alert("not working");
}
});
}
работает это так. если отправляю запрос, то после var_dump($data) код вылетает(так как не приходит '89' из echo), и срабатывает alert("not working"). Если убрать var_dump($data) и заменить его значением, то в ответе приходит '89' из echo.
Re: Не могу получить данные из POST Ajax
F12 в браузере, откройте вкладку сеть и посмотрите, что возвращается в ответ на запрос ajax.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Re: Не могу получить данные из POST Ajax
ответ 200OK Content-Length:"16", но это ошибка, так как срабатывает function (errormessage) {alert("not working");} как просмотреть errormessage?
Re: Не могу получить данные из POST Ajax
во первых пользуйтесь тег code когда копируете код на форум ...
во вторых я уже сказал вам про дебаг ... почему вы туда не зашли ... если бы зашли увидели картину чтото типа: https://yadi.sk/d/52dJs-rsvKBDE и сразу стало бы ясно многое ... плюс там же и ошибку вы бы скопировали ...
в третьих fwrite($file,var_dump($data));
что это за конструкция ? var_dump не возвращает результат в виде строки чтоб его кудато передавать ...
print_r умеет такое делать если передать второй параметр true ...
во вторых я уже сказал вам про дебаг ... почему вы туда не зашли ... если бы зашли увидели картину чтото типа: https://yadi.sk/d/52dJs-rsvKBDE и сразу стало бы ясно многое ... плюс там же и ошибку вы бы скопировали ...
в третьих fwrite($file,var_dump($data));
что это за конструкция ? var_dump не возвращает результат в виде строки чтоб его кудато передавать ...
print_r умеет такое делать если передать второй параметр true ...
Re: Не могу получить данные из POST Ajax
Request Body:
Content Type 'application/json; charset=utf-8'
Raw 'id=4&_csrf_backend=QVpiblBDbmUnOzcXNjYkHzMKGzgmej0RLhQuFzINAz92AihXEQ0XUA%3D%3D'
статус 200.
т.е. данные уходят в посте.
а ответ сервера в дебаг где искать?
fwrite($file,var_dump($data)); пишет в файл результат var_dump($data), а не возвращает результат.
Content Type 'application/json; charset=utf-8'
Raw 'id=4&_csrf_backend=QVpiblBDbmUnOzcXNjYkHzMKGzgmej0RLhQuFzINAz92AihXEQ0XUA%3D%3D'
статус 200.
т.е. данные уходят в посте.
а ответ сервера в дебаг где искать?
fwrite($file,var_dump($data)); пишет в файл результат var_dump($data), а не возвращает результат.
Re: Не могу получить данные из POST Ajax
У вас в панели дебага должна быть кнопка "AJAX[счётчик запросов]". Кликаете на неё, появляется список ваших ajax-запросов. В них можно кликнуть по ID дебага и откроется информация по этому запросу. В разделе Request смотрите какие данные в $_POST.
Re: Не могу получить данные из POST Ajax
не ответ сервера ... а дебаг выполнения ...
вашсайт/debug/
вы издеваетесь ?
давайте по порядку ...
fwrite - принимает на вход два параметра
1 - это указатель на файл
2 - это записываемая строка
указатель на файл у вас в $file, все хорошо
но где же второй параметр, строка ? вы там пишите var_dump ... но var_dump не возвращает строку он выводит данные на экран ...
поэтому в файл у вас не пишется ...
теперь еще насчет
dataType: "json",
а вы не думаете после этого в контроллере прописать
Код: Выделить всё
Yii::$app->response->format = Response::FORMAT_JSON;
Re: Не могу получить данные из POST Ajax
Так я уже написал что уходит постом. Мне интересно, что приходит с сервера.
Re: Не могу получить данные из POST Ajax
как что, приходит результат вар дампа, т.к. он не в файл летит а на вывод ... и ваше echo ...
хотите var_dump поместить в строку
Код: Выделить всё
ob_start();
var_dump($data);
$str = ob_get_clean();
Re: Не могу получить данные из POST Ajax
понятно, тут ещё те чайники. может кто более прошареный ответит?
Re: Не могу получить данные из POST Ajax
Какая именно?guru_nemo писал(а): ↑2017.04.10, 21:43 Проблема в следующем. Отправляю ajax запрос не из формы а функцией $.ajax({ }) если это делаю GET, то всё работает. Но как только меняю на POST, сразу жопа.
Перерыл весь инет. Пробовал отправлять csrfToken в запросе data: {'id': '2', csrfParam : csrfToken} не помогло.
Работает следующим образом. Когда в action я пишу $data = $request->post(); и потом пробую обратиться к $data вылетает какая-то ошибка.
Re: Не могу получить данные из POST Ajax
уважаемый, я вам дал ответ, вы в нем не разобрались и решили что он не верный или в чем беда ?
вы до сих пор не поняли про var_dump ? http://php.net/manual/ru/function.var-dump.php почитайте, особенно про раздел возвращаемых значений ...
про json я вам написал(ошибки нет, у вас ответ не верный который ждет ajax ...), где находится дебаг я тоже написал ... что вы хотите чтоб вам еще ответили ?
вы до сих пор не поняли про var_dump ? http://php.net/manual/ru/function.var-dump.php почитайте, особенно про раздел возвращаемых значений ...
про json я вам написал(ошибки нет, у вас ответ не верный который ждет ajax ...), где находится дебаг я тоже написал ... что вы хотите чтоб вам еще ответили ?
-
- Сообщения: 239
- Зарегистрирован: 2017.03.28, 20:03
Re: Не могу получить данные из POST Ajax
Уважаемы caHek2x все верно подметил.
Однако ваша проблема с тем что вы не можете получить данные post запроса заключается в отсутствии json парсера для компонента request.
Пропишите в конфиге приложения что то типа:
Однако ваша проблема с тем что вы не можете получить данные post запроса заключается в отсутствии json парсера для компонента request.
Пропишите в конфиге приложения что то типа:
Код: Выделить всё
'request' => [
'cookieValidationKey' => 'ваш ValidationKey',
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
Re: Не могу получить данные из POST Ajax
к счастью то ли yii то ли jquery то ли просто php (даже не задумывался) но данные из поля data корректно преобразует в массив в запросе ... так что тут беды нет ) просто ajax ждет ответа json ... а ответ это набор текста: 1-е это то что выведет vardump (как писал выше он не в файл выведет он выведет в "вывод" то есть в ответ ...) и + echo ...
-
- Сообщения: 239
- Зарегистрирован: 2017.03.28, 20:03
Re: Не могу получить данные из POST Ajax
Не совсем понимаю как jquery может, как вы говорите, "данные из поля data корректно преобразует в массив" ...
Request компонент занимается преобразованием в массив данных из запроса. Однако по умолчанию парсер json не включен в компоненте.
Выдержка из phpDoc`а:
Request компонент занимается преобразованием в массив данных из запроса. Однако по умолчанию парсер json не включен в компоненте.
Выдержка из phpDoc`а:
Код: Выделить всё
/**
* @var array the parsers for converting the raw HTTP request body into [[bodyParams]].
* The array keys are the request `Content-Types`, and the array values are the
* corresponding configurations for [[Yii::createObject|creating the parser objects]].
* A parser must implement the [[RequestParserInterface]].
*
* To enable parsing for JSON requests you can use the [[JsonParser]] class like in the following example:
*
* ```
* [
* 'application/json' => 'yii\web\JsonParser',
* ]
* ```
*
* To register a parser for parsing all request types you can use `'*'` as the array key.
* This one will be used as a fallback in case no other types match.
*
* @see getBodyParams()
*/
public $parsers = [];
Re: Не могу получить данные из POST Ajax
демонстрирую:
вьюшка:
контроллер:
запускаем, нажимаем кнопку
в консоле браузера:
https://yadi.sk/i/qqOSOE1U3GsAqd
в дебагер:
https://yadi.sk/i/lw3ZCNJz3GsAsV
в конфиге:
вьюшка:
Код: Выделить всё
<script>
function send(){
var csrfToken = $('meta[name="csrf-token"]').attr("content");
$.ajax({
type : "POST",
url : "<?= yii\helpers\Url::toRoute(['/site/test-json'])?>",
data : {
_csrf: csrfToken,
id : 123,
test : 456
},
dataType: "json",
success : function (data){
console.log(data);
}
});
}
</script>
<?=\yii\helpers\Html::button("Тест", ['onclick'=>'send()']);?>
Код: Выделить всё
use Yii;
use yii\web\Controller;
use yii\web\Response;
class SiteController extends Controller
{
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
];
}
public function actionTestJson()
{
if(Yii::$app->request->isAjax)
{
Yii::$app->response->format = Response::FORMAT_JSON;
return ['test' => 123];
}
return $this->render('test-json');
}
}
в консоле браузера:
https://yadi.sk/i/qqOSOE1U3GsAqd
в дебагер:
https://yadi.sk/i/lw3ZCNJz3GsAsV
в конфиге:
Код: Выделить всё
'request' => [
'cookieValidationKey' => '....',
],
-
- Сообщения: 239
- Зарегистрирован: 2017.03.28, 20:03
Re: Не могу получить данные из POST Ajax
Я вас изначально не правильно понял.
В этом случае jquery согласно dataType: json понимает что ожидается json строка и преобразует ее в массив.
Из вашего сообщения я подумал об этом куске:
Соответственно что бы метод post вернул массив при входящем запросе с json данными, request компонент должен иметь парсер соответвующий контент тайпу запроса.
Да, и в вашем случае вы ajaxом отправляете обычный POST запрос. Но ни как не json
В этом случае jquery согласно dataType: json понимает что ожидается json строка и преобразует ее в массив.
Из вашего сообщения я подумал об этом куске:
Код: Выделить всё
$data = $request->post();
Да, и в вашем случае вы ajaxом отправляете обычный POST запрос. Но ни как не json
Re: Не могу получить данные из POST Ajax
Сделал следующее:
в $data получается id=4
можно ли как-то эту $data преобразовать в массив или объект средствами yii2?
Код: Выделить всё
if ($request->isPost && $request->isAjax)
{
$data = \Yii::$app->request->getRawBody();
echo json_encode($data);
}
можно ли как-то эту $data преобразовать в массив или объект средствами yii2?