Данные Ajax равны нулю, когда они явно являются массивом

#jquery #ajax #arrays #json

#jquery #ajax #массивы #json

Вопрос:

у меня есть следующий PHP-код:

         $organization_modules = $this->getDatabase()->template('
  SELECT * FROM Module Module
   INNER JOIN Organization_has_Module OHOM
   ON Module.id = OHOM.Module_id
   WHERE OHOM.Organization_id = ' . $_SESSION['User']['org'] . '
   AND Module.category_id = ' . $_POST['category_id'], MySqlTemplates::RFQ_FM);
    $all_modules = $this->getDatabase()->template('SELECT * FROM Module WHERE category_id = ' . $_POST['category_id'], MySqlTemplates::RFQ_FM);
    foreach ($organization_modules as $module)
    {
        for ($i = 0, $size = count($all_modules); $i < $size; $i  )
        {
            if ($module['id'] == $all_modules[$i]['id'])
            {
                $all_modules[$i]['is_owned'] = true;
            }
        }
    }
print json_encode($all_modules);
  

Теперь это возвращает следующий массив:

введите описание изображения здесь

Однако, когда я отлаживаю его в Chrome, он говорит, что данные равны нулю:

Вот мой ajax

       $.ajax({
    type: 'POST',
    url: '/Module/findByCategory',
    dataType: 'json',
    data: {
        request: 'ajax',
        category_id: id
    },
    success: function (data) {
        $('#module_content').html('');
        $('#module_content').prepend('<div class="col-md-12"><a href="/Modules/index" class="btn btn-primary"><i class="fa fa-arrow-left"></i> Tilbage</a></div>');
        if(data.length > 0)
        {});
  

Кто-нибудь может сказать мне, что происходит. я также просмотрел Network-> reponse, но даже в ответе говорится, что он ничего не возвращает

выходной массив
введите описание изображения здесь

** Обновить**

Забавное замечание, если я print json_encode('hello')

Тогда i результат не равен нулю, а hello

что-то не так с моим массивом??

Обновление 2

Хорошо, итак, я попытался для развлечения выбрать всех своих пользователей и распечатать их

И ЭТО СРАБОТАЛО?

Итак, что-то явно не так с моим массивом, может быть, там есть нулевые значения?

Обновление 3

ради интереса я убедился, что ни одно значение не равно null, и теперь это работает…

ЧТО, ЧЕРТ ВОЗЬМИ, ПРОИСХОДИТ ?!?!?!?

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

1. вместо print используйте echo

2. @AmitSoni Как так получилось? :S

3. echo json_encode($ all_modules); похоже, не работает

4. поставьте print_r($all_modules) и посмотрите, что там в массиве!

5. @RahulGupta Я могу отлаживать PHP с помощью Xdebug, и массив заполняется данными

Ответ №1:

Я публикую ответ в соответствии с запросом OP: был неизвестный символ (отмечен ? на скриншоте), что, вероятно, приводит к сбою кодирования. Однако подумайте о том, чтобы перепроверить кодировку вашей базы данных, таблиц, драйвера php db и других элементов головоломки, чтобы убедиться, что это никогда не повторится, поскольку для людей совершенно нормально иметь имена с диакритическими знаками, такими как Ólafur Arnalds

Ответ №2:

ваш код выглядит правильно. Ищите ошибки / нулевые значения в массиве, созданном для вашей строки:

 $all_modules = $this->getDatabase()->template('SELECT * FROM Module WHERE category_id = ' . $_POST['category_id'], MySqlTemplates::RFQ_FM);