ZendFramework-Ajax
AJAXは、Webプログラミングの最新テクノロジーです。ページを更新せずに、Webページ内のデータを非同期で送受信するオプションを提供します。Zendフレームワークは、json モデルスルー zend-view そして zend-json成分。この章では、ZendAJAXプログラミングについて学びましょう。
jsonコンポーネントをインストールします
Zend jsonコンポーネントは、 Composer 以下に指定するコマンド-
composer require zendframework/zend-json
概念
Zend Frameworkは、AJAX対応のWebアプリケーションを簡単に作成するための2つの方法を提供します。それらは次のとおりです-
ザ・ isXmlHttpRequest() のメソッド Requestオブジェクト– AJAXリクエストが行われた場合、リクエストオブジェクトのisXmlHttpRequest()メソッドはtrueを返し、それ以外の場合はfalseを返します。このメソッドは、サーバー側でAJAXリクエストを適切に処理するために使用されます。
if ($request->isXmlHttpRequest()) {
// Ajax request
} else {
// Normal request
}
Zend / View / Model / JsonModel – JsonModel の代替です ViewModelAJAXおよびRESTAPIシナリオ専用に使用されます。JsonModelと一緒にJsonStrategy (モジュールのビューマネージャーブロックで構成されます)モデルデータをにエンコードします Json ビュー(phtml)ではなく応答として返します。
AJAX –実例
新しいajaxページを追加しましょう。 ajaxチュートリアルモジュールで、本の情報を非同期で取得します。これを行うには、次の手順に従う必要があります。
ステップ1:モジュール構成にJsonStrategyを追加する
チュートリアルモジュール構成ファイル(myapp / module / Tutorial / config / module.config.php)のビューマネージャーブロックを更新します。次に、JsonStrategy で動作します JsonModel jsonデータをエンコードして送信します。
'view_manager' => [
'template_map' => array
('layout/layout' => __DIR__ . '/../view/layout/newlayout.phtml'),
'template_path_stack' => [
'tutorial' => __DIR__ . '/../view',
],
'strategies' => array('ViewJsonStrategy',),
],
ステップ2:TutorialController.phpにajaxActionメソッドを追加します
次のコードを使用して、TutorialController.phpにajaxActionメソッドを追加します-
public function ajaxAction() {
$data = $this->bookTable->fetchAll();
$request = $this->getRequest();
$query = $request->getQuery();
if ($request->isXmlHttpRequest() || $query->get('showJson') == 1) {
$jsonData = array();
$idx = 0;
foreach($data as $sampledata) {
$temp = array(
'author' => $sampledata->author,
'title' => $sampledata->title,
'imagepath' => $sampledata->imagepath
);
$jsonData[$idx++] = $temp;
}
$view = new JsonModel($jsonData);
$view->setTerminal(true);
} else {
$view = new ViewModel();
}
return $view;
}
ここで、ajaxActionは着信リクエストがAJAXであるかどうかをチェックします。着信リクエストがAJAXの場合、JsonModel作成されます。それ以外の場合、通常ViewModel 作成されます。
どちらの場合も、書籍情報はデータベースからフェッチされ、モデルに入力されます。モデルがJsonModelの場合、JsonStrategy が呼び出され、データがjsonとしてエンコードされ、応答として返されます。
ザ・ $query->get('showJson') == 1デバッグの目的で使用されます。追加するだけですshowJson=1 URLとページにjsonデータが表示されます。
ステップ3:ajax.phtmlを追加する
次に、ビュースクリプトを追加します ajax.phtmlajaxActionメソッドの場合。このページには、ラベルとのリンクがあります–Load book information。
そのリンクをクリックすると、AJAXリクエストが実行され、書籍情報がJsonデータとしてフェッチされ、書籍情報がフォーマットされたテーブルとして表示されます。AJAX処理は、JQuery。
完全なコードリストは次のとおりです-
<a id = "loadbook" href = "#">Load book information</a>
</br> </br>
<table class = "table">
<tbody id = "book">
</tbody>
</table>
<script language = "javascript">
$(document).ready(function(){
$("#loadbook").on("click", function(event){
$.ajax({
url: '/tutorial/ajax',
type: 'POST',
dataType: 'json',
async: true,
success: function(data, status) {
var e = $('<tr><th>Author</th><th>Title</th><th>Picture</th></tr>');
$('#book').html('');
$('#book').append(e);
for(i = 0; i < data.length; i++) {
book = data[i];
var e = $('<tr><td id = "author"></td><td id = "title"></td>
<td id="imagepath"><img src = ""/></td></tr>');
$('#author', e).html(book['author']);
$('#title', e).html(book['title']);
$('#imagepath img', e).attr('src', book['imagepath']);
$('#book').append(e);
}
},
error : function(xhr, textStatus, errorThrown) {
alert('Ajax request failed.');
}
});
});
});
</script>
ステップ4:アプリケーションを実行する
最後に、アプリケーションを実行します- http://localhost:8080/tutorial/ajax [書籍情報の読み込み]リンクをクリックします。
結果は以下のようになります−
Ajax Page −
Ajax Page with Book Information
Ajax page with debugging information