в ajax не возвращаются данные из PHP

Статус
В этой теме нельзя размещать новые ответы.

jdbiz

Постоялец
Регистрация
18 Апр 2015
Сообщения
57
Реакции
10
Добрый день, уважаемые форумчане.
Делаю фильтр для категорий и столкнулся с такой проблемой при подключении ajax:

В java скрипте делаю запрос на выполнение ajax:
Код:
 // Получение данных
function _getData() {
    var catalogData = 'category=' + selectedCategory + '&' + ui.$form.serialize();
    $.ajax({
        url: '/jscript/filter/catalog.php',
        data: catalogData,
        type: 'GET',
        cache: false,
        dataType: 'json',
        success: function(data) {
          window.alert("нет ошибки");
          },
          error:  function(data){
           window.alert("есть ошибка");
;
            }
    });
}

в файле /catalog.php подключаюсь к базе, выполняю sql запрос и получаю отфильтрованный список товаров:

PHP:
try {
  // Подключаемся к базе данных
$conn = connectDB();
// Получаем данные от клиента
$options = getOptions();
// Получаем товары
$goods = getGoods($options, $conn);
// Возвращаем клиенту успешный ответ
echo json_encode(array(
    'code' => 'success',
    'goods' => $goods,
));
}
catch (Exception $e) {
    // Возвращаем клиенту ответ с ошибкой
    echo json_encode(array(
        'code' => 'error',
        'message' => $e->getMessage()
    ));
}

Все данные с клиента на сервер приходят, sql запрос выполняется успешно (отслеживаю получение ответа через браузер "network->XHR:
94CucIWA3SX7np

Для просмотра ссылки Войди или Зарегистрируйся

Но ajax все время выполняет инструкцию "error:"

Подскажите, пожалуйста, как поймать ошибку???
 
в общем проблема оказалась в типе данных. Почему-то из скрипта php данные прилетают не в json, хотя я же в него кодирую когда возвращаю ответ клиенту....
Может у кого есть мысли по этому поводу?
 
пробовал:

  • Warning: json_encode() expects exactly 1 parameter, 2 given in /home/virtww

    • :conf:
 
Из sql получаю данные функцией getgoods и трансформирую их в асоц.массив, вот код обработки полученного ответа из sql:

$data = $conn->query($listing_sql);
$rows = array();
while ($row = $data ->fetch_assoc()) {
$rows[] = $row;
}
return ($rows);

Затем вызываю функцию с нужными мне параметрами и пытаюсь клиенту вернуть строку:

$goods = getGoods($options, $conn);
// Возвращаем клиенту успешный ответ
echo json_encode(array(
'code' => 'success',
'goods' => $goods,
));

Но данные прилетают как sqli объект, а не строка. А мне нужен json на входе
 
You have to parse the json first:

Код:
 "success": function (data) {
  var response = JSON.parse (data);
  if (response.code == "error") {
     window.alert ("there is an error");
  } else {
      window.alert (response.goods);
  }
}
 
You have to parse the json first:

Код:
 "success": function (data) {
  var response = JSON.parse (data);
  if (response.code == "error") {
     window.alert ("there is an error");
  } else {
      window.alert (response.goods);
  }
}
Зачем вызов JSON.parse (data) если в ajax запросе и так указан тип:
dataType: 'json',
В таком случае преобразование будет происходит автоматически в объект js.А такой вызов, как у вас будет вызывать ошибку.Потому что-то преобразование уже произошло автоматически при приеме ответа с сервера!
 
Из sql получаю данные функцией getgoods и трансформирую их в асоц.массив, вот код обработки полученного ответа из sql:

$data = $conn->query($listing_sql);
$rows = array();
while ($row = $data ->fetch_assoc()) {
$rows[] = $row;
}
return ($rows);

Затем вызываю функцию с нужными мне параметрами и пытаюсь клиенту вернуть строку:

$goods = getGoods($options, $conn);
// Возвращаем клиенту успешный ответ
echo json_encode(array(
'code' => 'success',
'goods' => $goods,
));

Но данные прилетают как sqli объект, а не строка. А мне нужен json на входе
В ajax уберите dataType: 'json',
А в success:
выведите результат в консоли или через alert.Посмотрите что возвращает строковое представление json?
Выставьте результат, который возвращается здесь на форуме, если можете так будет понятней!
 
He already posted the console picture. check 1st post.
Thats why i though to do the 'parse'. It returns as an object.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху