Возврат из своего сниппета 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('Форма прошла проверку');
}

Заранее спасибо!!!
Idris
23 октября 2017, 14:53
modx.pro
956
0

Комментарии: 6

Илья Уткин
24 октября 2017, 11:17
+1
Внимательно изучите документацию. Вам нужно в сниппете вернуть данные, которые вы хотите отобразить, внутри массива data. А на сайте с помощью JS-скрипта нужно поймать событие af_complete, получить из ответа массив data и собственно, заменить содержимое нужного HTML-блока.
    Idris
    24 октября 2017, 18:56
    0
    Илья спасибо за наводку.
      Idris
      25 октября 2017, 18:14
      0
      Илья спасибо разобрался!!!
        Илья Уткин
        25 октября 2017, 19:00
        0
        Было бы неплохо скинуть сюда рабочий код — для других новичков, которые столкнутся с этой же проблемой)
          Idris
          25 октября 2017, 19:03
          0
          Обязательно кину. Оформлю все красиво.
      Idris
      25 октября 2017, 20:50
      0
      Все оказалось очень просто:

      return $AjaxForm->success('есть результат', array('data' => $htmlstring));

      Возвращаем форме что все у нас удачно, и туда же в хвост после запятой массив или строку не важно. Важно что теперь вы можете явоскриптом ее получить:
      $(document).on('af_complete', function(event, response) {
      var form = response.data.data;
      console.log(form);

      Не обращайте внимание на data.data это потомучто я так назвал свой массив. Уверен что можно выполнить все еще красивее, но я пока добрался до этого. В моем случае работает.
      Вообще через response в данном случае можно получить много поезных данных если задачи сложнее.
      Илье спасибо еще раз
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        6