Symfony'de bir eylem çağırım ve json'u jQuery frontend'e döndürmesini istiyorum.Symfony'de json ajax döndürür?
Jobeet öğreticisi bir kısmi döndürmeyi öğretir, ancak kısmi olarak değil, jsonu döndürmek istiyorum.
Symfony'de bir eylem çağırım ve json'u jQuery frontend'e döndürmesini istiyorum.Symfony'de json ajax döndürür?
Jobeet öğreticisi bir kısmi döndürmeyi öğretir, ancak kısmi olarak değil, jsonu döndürmek istiyorum.
, ben geçmişte bir yerlerde aşağıdaki kullandım düşünüyorum Symfony'nin 2.x durumunda "hızlı ve kirli "yol böyle görünüyor:
return new Response(json_encode($data), 200, array('Content-Type', 'text/json'));
ucuz yolu:
function executeSomethingThatReturnsJson(){
$M = new Model();
$stuff = $M->getStuff();
echo json_encode($stuff);
die(); //don't do any view stuff
}
akıllı yol:
daha akıllı bir yol json-malzeme taşıma yardımcı sfActions güzel alt sınıfını yaratmaktır. Geçenlerde yaptığımız bir projede
, ben 'api' (./symfony generate:application api
)
adında bir uygulama oluşturulan ve daha sonra böyle bir dosya oluşturdum:
API/lib/apiActions.class.php
<?PHP
class apiActions extends sfActions {
public function returnJson($data){
$this->data = $data;
if (sfConfig::get('sf_environment') == 'dev' && !$this->getRequest()->isXmlHttpRequest()){
$this->setLayout('json_debug');
$this->setTemplate('json_debug','main');
}else{
$this->getResponse()->setHttpHeader('Content-type','application/json');
$this->setLayout('json');
$this->setTemplate('json','main');
}
}
}
Şablonu orada açıkça belirlediğime dikkat edin.
Yani benim jsonSuccess.php şablon basitçe:
<?PHP var_dump($data); ?>
Sonra yerine olağan sfActions arasında (apiActions uzanan bir denetleyici sahip olabilir:
json_debugSuccess.php güzel şeyler yapar<?PHP echo json_encode($data);
iken): şunun gibi görünüyor:
Yasal Uyarı: Yukarıdaki kod kopyadır/sahip olduğum bir uygulamadan yapıştırıldı, ancak basitleştirildi. Sadece açıklama amaçlıdır - ama sizi doğru yöne yönlendirmelisiniz.
return $this->renderText(json_encode($something));
bu gerçekten çok komik :) çok fazla kod yayınladı ama önceki cevap bir satırdı ve işe yaradı :) 1+ için de olsa yardım etmek için hevesli olmak :) :) –
Doğru - diğer cevap daha güzel bir versiyon "ucuz yol". Cevabımın geri kalanı, çevreye göre farklı şeyler ele almakla ilgili olsa da, çok daha temiz bir şekilde yapılabileceğine eminim. – timdev
Bilginize: Eğer onu getiriyorduk sadece normal AJAX eylem ise
Hatta rotanız iyi formatı belirtiyorsa '' Response (json_encode ($ data)) koyabilirsiniz. {_controller: sizin: action, _format: json} ') –
Yeni JsonResponse (array);
Devre modunda web hata ayıklama çubuğuna sahipseniz, sfConfig :: set ('sf_web_debug', false) satırını eklemelisiniz; – chiborg
Bu, json'u yanıt gövdesine döndürecektir, ancak içerik türü metin/html olacaktır. '$ This-> getResponse() -> setContentType ('application/json') 'nı ekleyin;' – ilanco