ajax用にphpなどでhtmlをそのまま出力させるのはなんだか違うように感じています。
パフォーマンスを再優先で考えるなら、確かにHTMLはJavaScriptのDOMで生成したほうが良いのですが、PHPとJavaScriptの両方でHTMLを生成しているとメンテナンスが大変です。
特に、テンプレートエンジンなどでPHPで動的にHTMLを生成している場合、それに対応するようJavaScriptを書くのは困難です。
そのような場合は、Ajaxで直接HTMLを受信し挿入するという方法も検討したほうがいいでしょう。
ちなみに、HTML文字列を挿入する場合、innerHTML
プロパティを使うと非常にパフォーマンスが悪くなってしまうのですが、insertAdjacentHTML
メソッドを利用すると高速に挿入できます。
element.insertAdjacentHTML - Web API インターフェイス | MDN
jsonなどで必要な情報(html情報も含む?)を出力して、jQueryで受け取った時にそれを解釈してそのままhtmlを出力することができそうな気がしています。
JSONは構造からしてHTML(XML)を表現するのは苦手です。
オブジェクトで要素名や属性、子要素を無理矢理プロパティとして表現すれば不可能でもないのですが、独自仕様となってしまい、メンテナンスなどで大変な事になります。
憶測ですが、その構造を解析してDOMに戻すコードのほうがややこしく、遅い気がします……
(検証していません)
DOM形式(?)でそのまま渡すとブラウザがhtmlをDOMに変換する作業も省略できそうな。。。
DOMというより、XMLで渡したほうがいいでしょう。
元々、Ajaxの根幹であるXMLHttpRequest
オブジェクトの名前で分かる通り、この仕様がXMLの送受信仕様として策定された(と予想できる)ものですし、
responseXML
プロパティで受信したXMLをDOMオブジェクトとして取得できます。
ただ、受信データのContent-type
ヘッダにapplication/xml
以外が指定されていると、FirefoxでresponseXML
プロパティがnull
になってしまいます。
それ以外にも、色々と問題があるようです。
[JavaScript]responseXMLではまった / LiosK-free Blog
responseXML
プロパティは色々と面倒そうなので、私はHTMLを構築するのに
- 必要な情報(表示項目の値など)のみをJSONで取得しHTMLを生成する
- HTML文字列を直接やり取りする
の二択にしています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。