json_encode() ничего не возвращает

#php #javascript #ajax #json

#php #javascript #ajax #json

Вопрос:

У меня есть PHP-скрипт, который анализирует массив с помощью метода json_encode (), но возвращает пустое значение

PHP-код выглядит следующим образом

 $companies = $db->getCustomerNames();
print_r($companies)
if (!empty($companies)){
$jsonstring = json_encode($companies);
echo $jsonstring ; 
}
else{
    echo 'false';
}
  
  • $ companies заполнен, и я еще не могу его распечатать

У меня также есть javascript, который выглядит следующим образом

 jQuery.ajax({

    type: "GET",
    url: "http://localhost/myscript.php"
    success: function(msg) {
        companies = jQuery.parseJSON(msg);
        //DO OTHER STUFF WITH companies 
    }
});
  
  • PHP-скрипт подключается к базе данных и отображает массив, закодированный в JSON
  • Javascript получает массив с помощью AJAX, чтобы я мог использовать его содержимое
  • Когда я нажимаю http://localhost/myscript.php я получаю пустую страницу
  • Отлично работает на моем локальном сервере
  • Страница размещена на Yahoo (не уверен, имеет ли это значение)

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

1. Как можно json_encode() вернуть этот вывод? Это print_r() результат.

2. Вы путаете json_encode и json_decode …?

3. Покажите свой PHP-код, который вы используете, json_encode() и echo результаты

4. Страница запроса также включена localhost ?

5. @BlotClock Вы правы, позже я заметил, что у меня был статус print_r и он был удален. Только тогда я заметил, что json_encode () ничего не возвращает для меня. Оказывается, функция отключена на сервере, который я использую

Ответ №1:

Если массив отображается так, как вы упомянули в тексте вашего вопроса, значит, что-то не так. На этой странице должно отображаться что-то вроде

 ["IBM","EDS","MICROSOFT"]
  

Не могли бы вы также опубликовать соответствующий PHP-код, пожалуйста?

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

1. Спасибо за предложение. Казалось, что массив, который я видел ранее, был результатом print_r . Теперь я вообще ничего не получаю. Это похоже на то, как если бы json_encode () ничего не возвращал. Я отредактировал свой пост, чтобы отразить проблему

2. @Maro Вы заполняете, $companies но вы проверяете $customers . Это опечатка?

3. да, это опечатка, фактический код имеет $ companies повсюду, я обновил свой пост, скопировав вставку из фактического файла

4. @Maro значит, print_r выводит массив, а json_encode — нет? Можете ли вы вызвать serialize() для массива и опубликовать данные здесь?

5. Print_r выводит массив следующим образом: ‘Array ( [0] => aqz [1] => Bit Lounge LTD [2] => customware [3] => I AM [4] => test )’ Я пробовал печатать вне статуса if и внутри, и оба раза сработало. После состояния encode ничего не выводится. Можете ли вы объяснить мне, что вы подразумеваете под вызовом сериализации в массиве.

Ответ №2:

Попробуйте использовать function_exist, потому что на некоторых серверах функции json * могут быть отключены или php настроен так, чтобы не использовать его

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

1. Обратите внимание на моего друга. Функция json_encode не существует. Какая глупая идея у Yahoo. Есть идеи о том, как я могу обойти проблему?

2. Я вошел в yahoo CP. В разделе PHP версия была установлена на PHP4, я изменил ее на PHP5, и мой код теперь работает. Спасибо, Евгений Скульдицкий

Ответ №3:

Сначала вы делаете, print_r($companies) затем вы echo $jsonstring; удаляете строку print_r, потому что, конечно, ответ не будет допустимой строкой JSON.

Также попробуйте добавить header("Content-Type: text/plain"); перед выполнением echo и обязательно поместите эту строку перед ЛЮБЫМ выводом.

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

1. И это будет пустая страница, если вы не освоите javascript для размещения этого содержимого на странице. Потому что сам AJAX не выводится на экран, но объект jqXHR содержит ответ. Используйте Firebug или инструменты веб-разработчика в Chrome и откройте вкладку сеть, чтобы посмотреть, продолжается ли какой-либо диалог AJAX, и проверьте ответ, полученный от вашего скрипта.

2. Я это понимаю. Мой PHP-скрипт отображает массивы JSON, этот скрипт вызывается из приложения с помощью вызова jQuery AJAX, который проходит через массив и выполняет такие действия, как автозаполнение и некоторые другие проверки. Локально это тоже работало нормально, но перестало работать, как только я развернулся на сервере, размещенном на yahoo.

3. Print_r — это оператор отладки, оставшийся после некоторой отладки, которую я выполнил после обнаружения проблемы и перед публикацией вопроса, и, следовательно, он отображался в приведенном выше коде. При удалении инструкции debug я получил пустую страницу. Оказывается, у хоста был PHP4, который не поддерживает json_encode. После работы с панелью управления хостом я смог выполнить обновление до PHP5, и код работал нормально

Ответ №4:

Ваш js правильный, и, как сказал JohnP, когда вы нажалиhttp://localhost/myscript.php вы должны получить массив, отображаемый как [«IBM», «EDS», «MICROSOFT»]. Проверьте, есть ли у вас код, подобный приведенному ниже:

 <?php
$a = array (0 =>'IBM' ,1=>'EDS' ,2=>'SUN' ,3=>'GOOGLE' ,4 => 'ORACLE'); 
echo json_encode($a);
?>
  

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

1. Я тоже этого ожидал, самое смешное, что это отлично работает на 2 или моих локальных серверах. Только не на Yahoo