ZendFramework2ѧϰ±Ê¼Ç jsonºÍajax
ZendFramework2ѧϰ±Ê¼Ç jsonºÍajax£¬ÓÐÐèÒªµÄÅóÓÑ¿ÉÒԲο¼Ï¡£
ҪʵÏÖzf2µÄ¿ØÖÆÆ÷Êä³öjsonÊý¾Ý£¬Ö÷ÒªÒª½â¾ö2¸öÎÊÌ⣬µÚÒ»¸ö¾ÍÊÇÐÞ¸ÄheaderÍ·µÄContent-type²¿·ÖΪ
'Content-Type: application/json'£¬µÚ¶þ¸ö¾ÍÊÇÊä³öjsonÊý¾Ý¡£
ÐÞ¸ÄheaderÍ·£¬¿ÉÒÔÊÖ¶¯ÐÞ¸ÄÒ²¿ÉÒÔ×Ô¶¯Ð޸ġ£
×Ô¶¯Ð޸ĵķ½Ê½ÊÇ£¬Ê¹ÓÃzf2µÄJsonRenderer£¬»òÕßjsonµÄview helper£º
1£©Ê¹ÓÃJsonRendererµÄ·½·¨£ºzf2ĬÈÏʹÓÃPhpRender£¬Òò´ËÐèÒªÔÚÏîÄ¿Æô¶¯µÄʱºò£¬ÐÞ¸Ärenderer¡£ÔÚÆô¶¯Ä£¿é£¨Application£©µÄonBootStrap·½·¨ÖУ¬Ìí¼ÓÒ»¸örenderʼþµÄlinstener£¨registerJsonStratery£©£¬
public function onBootstrap($e) { // Register a render event $app = $e->getParam('application'); $app->getEventManager()->attach('render', array($this, 'registerJsonStrategy'), 100); }ÔÚlisntenerÖн«jsonStratery sttachµ½ViewµÄEventMangerÉÏ£¬
public function registerJsonStrategy($e) { $matches = $e->getRouteMatch(); $moduleRootName = $matches->getMatchedRouteName();//$moduleaRootNameÊÇÔÚmodule.config.phpÖÐÅäÖõÄrouteÃû³Æ if ($moduleRootName != 'test') { //¸ÃÄ£¿éËùÓпØÖÆÆ÷¶¼ÉèÖÃΪJsonRenderer return; } $app = $e->getTarget(); $locator = $app->getServiceManager(); $view = $locator->get('Zend\View\View'); $jsonStrategy = $locator->get('ViewJsonStrategy'); $view->getEventManager()->attach($jsonStrategy, 100); }2£©Ê¹ÓÃview helperµÄ·½·¨£ºÔÚ¿ØÖÆÆ÷ÀïÃæ½ûÓÃlayout£¨$view->setTerminal(true);£©»òÕßÔÚlayoutÀïÃæ²»ÒªÊä³öÈκÎhtml£¬È»ºóviewÀïÃæjsonÊä³ö£¬
$arr = array(); $arr[] = 1111; $arr[] = 'aaaa'; echo $this->json($arr); ÊÖ¶¯ÐÞ¸ÄheaderÍ·µÄ·½Ê½£¬ÔÚviewÀïÃæ£¨½ûÓÃlayout£©»òÕßÔÚlayoutÀïÃæÊä³ö£¬
zf2ÌṩÁËjson±à½âÂëÀàZend\Json\JsonÓÃÓÚjsonÊý¾Ý±à½âÂ룬¸ÃÀà»áÏȳ¢ÊÔʹÓÃphpº¯Êýjson_encodeºÍjson_decode½øÐбà½âÂ룬Èç¹ûphp²»Ö§³ÖÕâ2¸öº¯Êý£¬¸ÃÀàÔò»áʹÓÃphp½Å±¾½øÐбà½âÂ룬Òò´Ë£¬ÔÚzf2Öо¡Á¿Ê¹ÓøÃÀà¶ø²»ÒªÊ¹ÓÃphpµÄjson_encodeºÍjson_decode½øÐбà½âÂë¡£
Àý×Ó1£ºÈõ¥¸ö¿ØÖÆÆ÷µÄactionÊä³öjson£¬
·½·¨Ò»£º
//¿ØÖÆÆ÷´úÂë use Zend\Json\Json; //....... $arr = array(); $arr[] = 1111; $arr[] = 'aaaa'; $jsonData = Json::encode($arr); $view = new ViewModel(array( 'jsonData' => $jsonData )); $view->setTerminal(true); return $view; //»òÕß $arr = array(); $arr[] = 1111; $arr[] = 'aaaa'; $view = new ViewModel(array( 'arr' => $arr )); return $view; //ÊÓͼ´úÂë header('Content-Type: application/json'); echo $this->jsonData; //»òÕß echo $this->json($this->arr);
·½·¨¶þ£ºÐ½¨Ò»¸ölayoutÎļþÈçÏ£¬
¿ØÖÆÆ÷´úÂ룬
use Zend\Json\Json; //....... $layout = $this->layout(); $layout->setTemplate('layout/json'); $arr = array(); $arr[] = 1111; $arr[] = 'aaaa'; $jsonData = Json::encode($arr); $view = new ViewModel(array( 'jsonData' => $jsonData )); return $view;ÊÓͼ´úÂ룬
echo $this->jsonData;Àý×Ó2£ºÈÃij¸öÄ£¿é»òÕßij¸ö¿ØÖÆÆ÷¶¼Êä³öjson£¬½«renderer¸ÄΪJsonRenderer²¢ÇÒ¸ü»»Ä¬ÈϵÄphp layoutºó£¬¾ÍÖ±½ÓÔÚviewÖÐÊä³öjsonÊý¾ÝÁË£¬
public function onRoute(MvcEvent $e)
{
$matches = $e->getRouteMatch();
$moduleRootName = $matches->getMatchedRouteName();//$moduleaRootNameÊÇÔÚmodule.config.phpÖÐÅäÖõÄrouteÃû³Æ
if ($moduleRootName != 'test') { //¸ÃÄ£¿éËùÓпØÖÆÆ÷¶¼ÉèÖÃΪJsonRenderer
return;
}
$controllerName = $matches->getParam('controller');//$controllerNameÊÇÔÚmodule.config.phpÖÐÅäÖõÄcontrollerÃû³Æ
if ($controllerName != 'Test\Controller\Test') { //¸Ã¿ØÖÆÆ÷ËùÓÐactions¶¼ÉèÖÃΪJsonRenderer
return;
}
$e->getViewModel()->setTemplate("layout/json");
}
public function onBootstrap(MvcEvent $e)
{
$eventManager
= $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
$eventManager->attach(MvcEvent::EVENT_ROUTE, array($this, 'onRoute'), -9000);
$eventManager->attach('render', array($this, 'registerJsonStrategy'), 100);
}
public function registerJsonStrategy($e)
{
$matches = $e->getRouteMatch();
$moduleName = $matches->getMatchedRouteName();
$matches = $e->getRouteMatch();
$moduleRootName = $matches->getMatchedRouteName();//$moduleaRootNameÊÇÔÚmodule.config.phpÖÐÅäÖõÄrouteÃû³Æ
if ($moduleRootName != 'test') { //¸ÃÄ£¿éËùÓпØÖÆÆ÷¶¼ÉèÖÃΪJsonRenderer
return;
}
$controllerName = $matches->getParam('controller');//$controllerNameÊÇÔÚmodule.config.phpÖÐÅäÖõÄcontrollerÃû³Æ
if ($controllerName != 'Test\Controller\Test') { //¸Ã¿ØÖÆÆ÷ËùÓÐactions¶¼ÉèÖÃΪJsonRenderer
return;
}
$app
= $e->getTarget();
$locator
= $app->getServiceManager();
$view
= $locator->get('Zend\View\View');
$jsonStrategy = $locator->get('ViewJsonStrategy');
$view->getEventManager()->attach($jsonStrategy, 100);
}
Ö®ºó£¬¾Í¿ÉÒÔÖ±½ÓÔÚä¯ÀÀÆ÷¶ËµÄjavascriptÖÐͨ¹ýajax»ñÈ¡jsonÊý¾ÝÁË£º
<script lang="javascript">
$(document).ready(function(){
$("#b01").click(function(){
htmlobj=$.ajax({url:"/test/json",async:false});
alert(htmlobj.responseText);
});
});
</script>
¡¡