It depends on what your requirements are. In general, as you say, there are two methods:
Either load the formatted HTML through Ajax, or load a JSON and then create the HTML yourself. Each has its advantages and disadvantages:
Loading HTML
Advantages:
- You can do generation on the server-side, thereby keeping the client-side code clean
Disadvantages
- The size of the packet you send over the wire will be bigger
- The request is very specific to that method alone, and it will be difficult to reuse
Loading JSON
Advantages:
- Payload is as small as can be
- Since you're not tying it to one implementation, you can reuse the JSON for other purposes (a mobile client for example)
Disadvantages:
- Generation of HTML has to be done on the client-side. If you're doing this manually or with jQuery, this can be cumbersome and tends to grow the client-side script. (a solution would be to use a templating engine such as moustache.js or handlebars.js)
- Your rendering logic is on the server AND on the client, which means not everything is in one place
As you can see, both have there pros and cons. There's no real hard rule here, and it depends on your situation.
In general, my advice would be if you want something quick and you don't think you will need the same method elsewhere use dynamic HTML loading. If you think you might want to reuse the data on other pages or with other clients, use JSON with a templating engine.