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

Тема в разделе "PHP", создана пользователем jdbiz, 18 фев 2018.

Статус темы:
Закрыта.
Модераторы: latteo
  1. jdbiz

    jdbiz Постоялец

    Регистр.:
    18 апр 2015
    Сообщения:
    54
    Симпатии:
    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:[​IMG]
    https://yadi.sk/i/94CucIWA3SX7np

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

    Подскажите, пожалуйста, как поймать ошибку???
     
  2. jdbiz

    jdbiz Постоялец

    Регистр.:
    18 апр 2015
    Сообщения:
    54
    Симпатии:
    10
    в общем проблема оказалась в типе данных. Почему-то из скрипта php данные прилетают не в json, хотя я же в него кодирую когда возвращаю ответ клиенту....
    Может у кого есть мысли по этому поводу?
     
  3. Цуиьфыеук

    Цуиьфыеук Создатель

    Регистр.:
    15 янв 2018
    Сообщения:
    37
    Симпатии:
    19
    Попробуйте
    PHP:
    json_encode($cJSON_FORCE_OBJECT)
     
  4. jdbiz

    jdbiz Постоялец

    Регистр.:
    18 апр 2015
    Сообщения:
    54
    Симпатии:
    10
    пробовал:

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

      • :conf:
     
  5. Цуиьфыеук

    Цуиьфыеук Создатель

    Регистр.:
    15 янв 2018
    Сообщения:
    37
    Симпатии:
    19
    а в каком виде возвращаются данные?
     
    giorno нравится это.
  6. jdbiz

    jdbiz Постоялец

    Регистр.:
    18 апр 2015
    Сообщения:
    54
    Симпатии:
    10
    Из 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 на входе
     
  7. Sandbird

    Sandbird Писатель

    Регистр.:
    21 фев 2018
    Сообщения:
    5
    Симпатии:
    2
    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);
      }
    }
     
  8. giorno

    giorno Постоялец

    Регистр.:
    18 сен 2017
    Сообщения:
    142
    Симпатии:
    80
    Зачем вызов JSON.parse (data) если в ajax запросе и так указан тип:
    dataType: 'json',
    В таком случае преобразование будет происходит автоматически в объект js.А такой вызов, как у вас будет вызывать ошибку.Потому что-то преобразование уже произошло автоматически при приеме ответа с сервера!
     
  9. giorno

    giorno Постоялец

    Регистр.:
    18 сен 2017
    Сообщения:
    142
    Симпатии:
    80
    В ajax уберите dataType: 'json',
    А в success:
    выведите результат в консоли или через alert.Посмотрите что возвращает строковое представление json?
    Выставьте результат, который возвращается здесь на форуме, если можете так будет понятней!
     
    Цуиьфыеук нравится это.
  10. Sandbird

    Sandbird Писатель

    Регистр.:
    21 фев 2018
    Сообщения:
    5
    Симпатии:
    2
    He already posted the console picture. check 1st post.
    Thats why i though to do the 'parse'. It returns as an object.
     
Статус темы:
Закрыта.