Возврат из своего сниппета AjaxForm
Приветствую друзья.
Подскажите пожалуйста, почему у меня не работает setPlaceholder?
Это сниппет вызывается AjaxForm. Получаю запрос от пользователя, получаю json, вытаскиваю то что мне нужно и строю простую таблицу. Дальше хочу ее отобразить в определенном месте на странице. Хотел использовать setPlaceholder. Но не работает.
<?php
if ($_POST['name'] =="") {
return $AjaxForm->error('Ошибки в форме', array(
'name' => 'Вы не ввели артикуль'
));
}
else {
// set HTTP header
$headers = array(
'Authorization: Basic (тут должен быть ключ)',
'Accept: application/json',
'Content-Type: application/json'
);
// query string
$fields = array(
'number' => $_POST['name'],
'find_substitutes' =>false,
'stor' => true
);
$url = 'https://www.part-kom.ru/engine/api/v3/search/parts?'. http_build_query($fields);
// Open connection
$ch = curl_init();
// Set the url, number of GET vars, GET data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// Execute request
$result = curl_exec($ch);
// Close connection
curl_close($ch);
// get the result and parse to JSON
$res = utf8_encode($result);
$result_arr = json_decode($res, true);
$htmlstring = "";
foreach ($result_arr as $value) {
$htmlstring = $htmlstring. "". $value['maker']. " ". "". $value['number']. " ". "". $value['description']. " ". "". $value['price']. " ";
};
$htmlstringtable = $htmlstring;
$modx->setPlaceholder('fname', $htmlstringtable);
return $AjaxForm->success('Форма прошла проверку');
}
Заранее спасибо!!!
Подскажите пожалуйста, почему у меня не работает setPlaceholder?
Это сниппет вызывается AjaxForm. Получаю запрос от пользователя, получаю json, вытаскиваю то что мне нужно и строю простую таблицу. Дальше хочу ее отобразить в определенном месте на странице. Хотел использовать setPlaceholder. Но не работает.
<?php
if ($_POST['name'] =="") {
return $AjaxForm->error('Ошибки в форме', array(
'name' => 'Вы не ввели артикуль'
));
}
else {
// set HTTP header
$headers = array(
'Authorization: Basic (тут должен быть ключ)',
'Accept: application/json',
'Content-Type: application/json'
);
// query string
$fields = array(
'number' => $_POST['name'],
'find_substitutes' =>false,
'stor' => true
);
$url = 'https://www.part-kom.ru/engine/api/v3/search/parts?'. http_build_query($fields);
// Open connection
$ch = curl_init();
// Set the url, number of GET vars, GET data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// Execute request
$result = curl_exec($ch);
// Close connection
curl_close($ch);
// get the result and parse to JSON
$res = utf8_encode($result);
$result_arr = json_decode($res, true);
$htmlstring = "";
foreach ($result_arr as $value) {
$htmlstring = $htmlstring. "
};
$htmlstringtable = $htmlstring;
$modx->setPlaceholder('fname', $htmlstringtable);
return $AjaxForm->success('Форма прошла проверку');
}
Заранее спасибо!!!
Комментарии: 6
Внимательно изучите документацию. Вам нужно в сниппете вернуть данные, которые вы хотите отобразить, внутри массива data. А на сайте с помощью JS-скрипта нужно поймать событие af_complete, получить из ответа массив data и собственно, заменить содержимое нужного HTML-блока.
Илья спасибо за наводку.
Илья спасибо разобрался!!!
Было бы неплохо скинуть сюда рабочий код — для других новичков, которые столкнутся с этой же проблемой)
Обязательно кину. Оформлю все красиво.
Все оказалось очень просто:
return $AjaxForm->success('есть результат', array('data' => $htmlstring));
Возвращаем форме что все у нас удачно, и туда же в хвост после запятой массив или строку не важно. Важно что теперь вы можете явоскриптом ее получить:
$(document).on('af_complete', function(event, response) {
var form = response.data.data;
console.log(form);
Не обращайте внимание на data.data это потомучто я так назвал свой массив. Уверен что можно выполнить все еще красивее, но я пока добрался до этого. В моем случае работает.
Вообще через response в данном случае можно получить много поезных данных если задачи сложнее.
Илье спасибо еще раз
return $AjaxForm->success('есть результат', array('data' => $htmlstring));
Возвращаем форме что все у нас удачно, и туда же в хвост после запятой массив или строку не важно. Важно что теперь вы можете явоскриптом ее получить:
$(document).on('af_complete', function(event, response) {
var form = response.data.data;
console.log(form);
Не обращайте внимание на data.data это потомучто я так назвал свой массив. Уверен что можно выполнить все еще красивее, но я пока добрался до этого. В моем случае работает.
Вообще через response в данном случае можно получить много поезных данных если задачи сложнее.
Илье спасибо еще раз
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.