2013-02-26 5 views
1

Извините, без сомнения, действительно основной вопрос ... но я не нашел возможного дубликата.где выход php идет, если объект json не возвращается

Если в конце PHP скрипт под названием используя $ .getJSON() У меня есть строка, как это:

return json_encode($paras_of_interest); 

... все работает нормально ... пока не будет какой-то выход PHP (неумышленно с помощью команды echo или, возможно, из-за предупреждения или ошибки, генерируемых php-кодом) ... это полностью отключает/останавливает/помещает возврат объекта JSON. Каков наилучший способ справиться с этой ситуацией? Как узнать, какой код был выведен (т. Е. Где он «идет»?) ... и есть ли способ настройки, где вывод идет в этой ситуации?

позже извинения Dezigo и Салмана A: все три были отличные ответы, но я должен был выбрать один

ответ

1
  1. Удостоверьтесь, что wil л и не будет выводиться перед этой строкой:

    • Для ошибок, установите display_errors директиву 0 и/или использовать обработчик ошибок
    • Для исключения используйте блок Try/поймать
    • Для другого выхода, если может быть любой, использовать буферизацию вывода (ob_start и ob_get_clean)
  2. Если вы захватили какие-либо неожиданные выходные/ошибки, не отправить его, но добавить параметр ошибки вашего ответа JSON:

    echo json_encode(array(
        'result' => /* your original result here */, 
        'error' => /* error message here */ 
    ); 
    

Ваш ответ всегда должен быть структурирован таким образом, ошибка быть пустым или ложным, если ошибки не произошло. На стороне клиента вы сначала оцените ошибку, а затем результат. Кроме того, вы можете отправить код статуса HTTP 500, если произошла ошибка, то вы должны быть в состоянии использовать функцию ошибки обратного вызова JQuery для обработки ошибок:

$statusCode = $error ? 500 : 200; 
header('content-type: application/json', true, $statusCode); 
+0

выглядит как профессиональный способ приблизиться к нему ...спасибо –

2

Вы можете сохранить свой выходной буфер (конец почистите)

<?php 

ob_start(); 

echo "Hello "; 

$out1 = ob_get_contents(); 

ob_end_clean(); 

var_dump($out1); 
?> 

http://www.php.net/manual/en/function.ob-get-contents.php

+0

супер! Просто то, что я искал ... даст ему попробовать –

1

Как можно узнать, что код был выходной (т.е. где он «идет»?)

Откройте инструменты разработчика, затем откройте страницу и зайдите на вкладку сети. Здесь вы должны найти все XHR. Это включает в себя неработающие ответы JSON.

Кроме того, библиотеки JavaScript не обрабатывают сломанные JSON. Например, jQuery игнорирует такой ответ и запускает обработчик ошибок (если он настроен). В зависимости от библиотеки JavaScript, обработчики успеха/ошибок могут предоставить вам доступ к необработанному responseText.

+0

спасибо ... Я пробовал смотреть на Firebug (Firefox) для рассматриваемой страницы, но я ничего не видел там ... –

+0

Ну, вы должны. FireBug должен быть «открытым», а сетевая панель должна быть включена для ведения журнала XHR. –

+0

да ... отличные вещи, спасибо! –

Смежные вопросы