tags:

views:

1002

answers:

3
+2  Q: 

iframes vs ajax

Suppose i have some tabs (e.g. jquery tab) and I want to dynamically load some page in each tab.

  1. I can do that by jquery ajax tabs (basically filling div with ajax data) or
  2. each tab can contain an iframe and page loaded into that.

Q1. I see no difference between two approaches to user, is there?

Q2. I think iframe way is better because iframe can load any page but sometimes loading ajax data into div may not work as expected.

+1  A: 

For one, having an error in an included page (or ajax call) is probably better to handle with the ajax approach. With iframes you'll just get an ugly 404 or 500 error in the middle of your page. But with ajax you can detect the error and display a more user-friendly error message.

It also depends on what data you're loading into your page. If you control the html being loaded in, you can avoid or fix any display issues that may arise. If you need to load a page outside of your control, iframes would be best (or necessary).

There may also be accessibility issues involved with either approach, but I'm not familiar enough with that to determine which approach works best with screen readers, etc.

kbosak
+1  A: 

If the pages are your content, and you can control the stylesheets and everything being accessed by each one...then go with option number one. You can engineer things so you don't have to retrieve shared content more than once.

If the pages are out of your control (external sites, etc.), then load them up in iFrames. You won't have to worry about the pages rendering properly, etc.

Justin Niessner
A: 

With iframes, you may run into scrollbar issues if the content is loaded from an external site and the width and height is not known in advance. With ajax and DOM manipulation, you won't have this issue.

This is THE single reason why I dumped iFrames in a particular case. The very hacky solution to reporting the width and height from a remote site being loaded in an iframe, was simply not worth the trouble.

Silas Hansen