Как возвратить корректный тип контента для JSON в CakePHP?

Только дать небольшой пример использования функциональности PHP XML для задачи:

$doc=new DOMDocument();
$doc->loadHTML("<html><body>Test<br><img src=\"myimage.jpg\" title=\"title\" alt=\"alt\"></body></html>");
$xml=simplexml_import_dom($doc); // just to make xpath more simple
$images=$xml->xpath('//img');
foreach ($images as $img) {
    echo $img['src'] . ' ' . $img['alt'] . ' ' . $img['title'];
}

я действительно использовал DOMDocument::loadHTML() метод, потому что этот метод может справиться с синтаксисом HTML и не вынуждает входной документ быть XHTML. Строго говоря преобразование в SimpleXMLElement не необходимо - оно просто делает использование xpath и результаты xpath более простыми.

10
задан JProgrammer 16 March 2011 в 01:45
поделиться

3 ответа

Я не уверен (и, честно говоря, я никогда не использовал CakePHP), но вы можете попробовать указать второй аргумент в методе setContent ..

замените это:

$this->RequestHandler->setContent('json') 

на это:

$this->RequestHandler->setContent('json', 'text/x-json');

см. этот файл для примера ..

1
ответ дан 3 December 2019 в 21:22
поделиться

Я делаю вызовы Ajax для получения содержимого JSON во всех моих проектах, и я никогда не делал большую часть того, что вы здесь делаете. Объем моего кода контроллера выглядит примерно так:

public function do_something_ajaxy() {
  Configure::write ( 'debug', 0 );
  $this->autoRender = false;

  /** Business logic as required */

  echo json_encode ( $whatever_should_be_encoded );
}

Я делаю вызовы Ajax через jQuery, поэтому полагаю, что может иметь значение, но это меня удивит. В этом случае проблема, по-видимому, связана с обработчиком, а не с вызывающим абонентом. Я бы рекомендовал удалить строки 17-23 и заменить их простым оператором echo json_encode (array ('response' => $ actions [0])) .

Вы также тестируете $ this-> RequestHandler-> isGet () . Попробуйте вместо этого протестировать $ this-> RequestHandler-> isAjax () . Я не уверен, распознаются ли вызовы Ajax как по их типу, так и по их методу.

7
ответ дан 3 December 2019 в 21:22
поделиться

У меня тоже только что возникла эта проблема, и я решил ее с помощью:

$this->RequestHandler->respondAs('text/x-json');

Также убедитесь, что значение параметра "debug" в вашем конфигурационном файле меньше 2, иначе заголовок не будет установлен.

2
ответ дан 3 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: